2.3.2 队列的链式存储实现
定义: 队列的链式存储可以用一个单链表实现。在一端(rear)插入另一端(front)删除。
图示:
问题及解决:
- 怎么判断空队列?
Q->front=NULL - 怎么判断队列只有一个结点?
Q->front=Q->rear
代码实现:
队列中删除结点
typedef struct Node *PtrToNode;
struct Node{
int data;
PtrToNode Next;
};
typedef PtrToNode Position;
struct QNode{
Position front,rear;
int MaxSize;
};
typedef struct QNode *Queue;
bool IsEmpty(Queue Q){
return (Q->front==NULL);
}
int DeleteQ(Queue Q){
PtrToNode FrontCell;
int FrontElem;
FrontCell=Q->front;
if(IsEmpty(Q)){
printf("空队列!\n");
return ERROR;
}else{
if(Q->front==Q->rear)
Q->front==Q->rear=NULL;
else
Q->front==Q->front->Next;
FrontElem=FrontCell->data;
free(FrontCell);
return FrontElem;
}
}