队列的链式存储结构不常用
- 同理,实际上也可以用一个单链表实现
- 插入、删除分别在链表两头进行,即插入在表尾(rear),删除在表头(front)
图解如下:
0、结构初始化
struct ListNode {
ElementType val;
struct ListNode* next;
};
struct QueueNode {
int size;
struct ListNode* front;
struct ListNode* rear;
};
1、建立空队列 createQueue
struct QueueNode* createQueue() {
struct QueueNode* q=malloc(sizeof(struct QueueNode));
q->front = q->rear = NULL;
q->size=0;
return q;
}
2、入队操作addQueue
//插入在表尾
void addQueue(struct QueueNode* q,ElementType x) {
struct ListNode* temp=malloc(sizeof(struct ListNode));
temp->val=x;
if (q->size==0) {
q->front = q->rear =temp;
}
else {
q->rear->next=temp;
q->rear=temp;
}
q->size++;
}
3、出队操作deleteQueue
//删除在表头
ElementType deleteQueue(struct QueueNode* q) {
struct ListNode* temp;
ElementType tmp;
if (q->size==0) return ERROR;
else {
temp=q->front;
q->front=temp->next;
tmp=temp->val;
free(temp)
q->size--;
return tmp;
}
}