【发布时间】:2014-04-26 14:33:07
【问题描述】:
作为练习,我正在尝试创建一个基本队列。我的deQueue 方法有问题。
#include<stdio.h>
typedef int Task;
typedef struct QueueNode_ QueueNode;
typedef struct TQueue_ TQueue;
struct QueueNode_ {
QueueNode* next;
Task task;
};
struct TQueue_ {
QueueNode* first;
QueueNode* last;
};
TQueue* initializeQueue(){
TQueue* queue = NULL;
queue = malloc(sizeof(TQueue));
queue->first = NULL;
queue->last = NULL;
return queue;
}
void enQueue(TQueue* q, Task t){
if(q->first == NULL){
q->first = malloc(sizeof(QueueNode));
q->first->task = t;
q->first->next = NULL;
q->last = q->first;
} else {
QueueNode* node = malloc(sizeof(QueueNode));
node->next = q->last;
node->task = t;
q->last = node;
}
}
void printQueue(TQueue* q){
QueueNode* node = q->last;
printf("LAST->");
while(node != NULL){
printf("%d->", node->task);
node = node->next;
}
printf("FIRST\n");
}
QueueNode* deQueue(TQueue* q){
QueueNode* temp = q->first;
QueueNode* newFirst = q->last;
q->first = NULL;
while(newFirst != NULL){
newFirst = newFirst->next;
}
q->first = newFirst;
return temp;
}
int main(){
TQueue* queue = initializeQueue();
enQueue(queue, 1);
enQueue(queue, 2);
printQueue(queue);
QueueNode* node = deQueue(queue);
printf("%d\n", node->task);
printQueue(queue);
return 0;
}
我希望我的 deQueue 方法能够移除队列的头部。但显然情况并非如此。
这是输出:
LAST->2->1->FIRST
1
LAST->2->1->FIRST
我怀疑我的deQueue 方法不会用第二个元素替换队列的头部,但我虽然是用q->first = newFirst; 做的,所以我有点卡住了。
如果不清楚,我希望它会打印出来:
LAST->2->1->FIRST
1
LAST->2->FIRST
【问题讨论】: