我试图在C编程中从队列中删除偶数时遇到困难。这是代码:
我的队列数据结构:
typedef struct _listnode
{
int data;
struct _listnode *next;
} ListNode; // You should not change the definition of ListNode
typedef struct _linkedlist
{
int size;
ListNode *first;
} LinkedList; // You should not change the definition of LinkedList
typedef struct _queue
{
LinkedList list;
} Queue;
我正从我的主人那里打来电话:
case 3:
deleteEven(&q); // You need to code this function
printf("Result:\n");
printList(&q.list);
break;
我要做的是首先,我试图检查队列是否为空。然后我将获得链表头和模数为2,如果得到0意味着它的偶数,然后我将它从队列中出列。
但是,使用这些代码,当我尝试从队列中出列偶数时,它就会停止工作并且不显示任何错误消息。
有谁知道如何解决这个问题?提前谢谢。
答案 0 :(得分:1)
在您的函数func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
if annotation.isMemberOfClass(MKUserLocation.self) {
return nil
}
let reuseId = "MKAnnotationView"
var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKAnnotationView
if pinView == nil {
pinView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId)}
pinView!.canShowCallout = true
pinView!.animatesDrop = false // i am not sure about this line so must try this by commenting
pinView!.image = UIImage(named: "marker.png") // make sure this name is the name of image
return pinView
}
' deleteEven
循环中执行此操作 -
while
问题1 - 但您还没有为free(odd->list.first->data); //problem 1
odd->list.first->data= odd->list.first->next; //problem 2- assigning pointer type to int
分配内存,它是一个整数变量。如果您尝试odd->list.first->data
这样的事情可能会导致您的程序出错(您不应 free
内存未由 free
分配或类似功能)
您将内存分配给malloc
,因此odd
指针free
。
即使您不应在odd
循环内free
,因为您只分配了一次内存。
问题2 - 您将指针类型指定给while
。这可能也是导致此错误的原因之一。
你应该写这样的循环 -
int
3。在调用函数while (!isEmptyQueue(odd)) {
enqueue(que, odd->list.first->data);
odd->list.first= odd->list.first->next; // increment pointer
}
free(odd);
-
dequeue
dequeue(que->list.first->data);
已通过,但预计会int
。
其类型为Queue *
,但您从中返回int
(返回NULL
或其他内容以显示失败)。