这是我的主要内容。c:
int main()
{
Queue* list = initialize();
if (!isEmpty(list))
{
fprintf(stderr, "Error!n");
}
enqueue(list, 10);
enqueue(list, 20);
display(list); // Output: 10 -> 20 -> nil
if (front(list) != 10)
{
fprintf(stderr, "Error!n");
}
if (back(list) != 20)
{
fprintf(stderr, "Error!n");
}
enqueue(list, 30);
display(list); // Output: 10 -> 20 -> 30 -> nil
int len = length(list);
if (len == 3)
{
fprintf(stdout, "Number of elements in Queue: %d.n", len);
}
else
{
fprintf(stderr, "Error!n");
}
dequeue(list);
display(list); // Output: 20 -> 30 -> nil
if (front(list) != 20)
{
fprintf(stderr, "Error!n");
}
if (back(list) != 30)
{
fprintf(stderr, "Error!n");
}
len = length(list);
if (len == 2)
{
fprintf(stdout, "Number of elements in Queue: %d.n", len);
}
else
{
fprintf(stderr, "Error!n");
}
empty(list);
display(list); // Output: Queue is empty.
free(list);
return 0;
}
这是我的队列。c:
Queue* initialize()
{
Queue* q = (Queue*)malloc(sizeof(Queue));
q->front = q->back = NULL;
return q;
}
struct Node* newNode(int item)
{
Node* temp = (Node*)malloc(sizeof(Node));
if (temp != NULL)
{
temp->value = item;
temp->next = NULL;
return temp;
}
}
int enqueue(Queue* q, int item)
{
Node *temp = newNode(item);
temp->value = item;
if (q->front == NULL)
q->front = temp;
else
q->back->next = temp;
q->back = temp;
q->back->next = q->front;
return item;
}
int dequeue(Queue *q)
{
Node *temp = q->front;
printf("nRemoving %d", temp->value);
q->front = q->front->next;
if (q->front == NULL)
q->back = NULL;
int item = temp->value;
free(temp);
return item;
}
Queue* display(Queue *q)
{
Node *temp;
temp=q->front;
if(temp==NULL)
printf("n The queue is empty");
else
{
printf("n");
while(temp != q->back)
{
printf("%d -> ",temp->value);
temp=temp->next;
}
printf("%d -> nil",temp->value);
}
return q;
}
int front(Queue *q)
{
if ((q->front != NULL) && (q->back != NULL))
return (q->front->value);
else
return -1;
}
int back(Queue *q)
{
if ((q->front != NULL) && (q->back != NULL))
return (q->back->value);
else
return -1;
}
bool isEmpty(Queue *q)
{
if((q->front == NULL) || (q->back == NULL))
return -1;
else
return 0;
}
void empty(Queue *q)
{
q->front = NULL;
q->back = NULL;
}
int length(Queue *q)
{
int count=0;
if(q->front!=NULL){
Node *temp = q->front;
while(temp->next != NULL)
{
count++;
temp = temp -> next;
}
}
return count;
}
输出应该是这样的:
10 -> 20 -> nil 10 -> 20 -> 30 -> nil Number of elements in Queue: 3. 20 -> 30 -> nil Number of elements in Queue: 2. Queue is empty.
我的输出:
10 -> 20 -> nil 10 -> 20 -> 30 -> nil
在这里它一直运行,直到我手动终止它。我不知道为什么,有人能帮忙吗?我的长度函数可能是错误的,但我不知道这是否是错误的原因&如何修复。另外,main.c是修复,我不能更改其中的任何内容。感谢您的帮助和阅读。
enqueue
时,您使用以下语句创建一个循环列表
q->back->next = q->front;
您不需要设置q->back->next
,它应该是并且已经是null
,因为newNode()
将其设置为"null"。