队列 —— 链式存储

队列:一种限定性的线性表,它只允许在表的一端插入元素,在表的另一端删除元素。在队列中,允许插入的一端叫做队尾,允许删除的一端则称为队头。

特点:先进先出。

链队列:用链表表示的队列称为链队列。

空链队列:

  非空链队列:

 

 链队列存储结构的定义:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 typedef int QueueElemType;
 4 typedef struct Node {
 5     QueueElemType data;/*数据域*/
 6     struct Node* next;/*指针域*/
 7 }QueueNode;
 8 typedef struct {
 9     QueueNode* front;/*队首指针*/
10     QueueNode* rear;/*队尾指针*/
11 }LinkQueue;

链队列初始化:

1 int InitQueue(LinkQueue* q) {
2     q->front = (QueueNode*)malloc(sizeof(QueueNode));
3     if (q->front != NULL) {
4         q->rear = q->front;
5         q->front->next = NULL;
6         return true;
7     }
8     return false;
9 }

链队列入队操作:

 1 int EnterQueue(LinkQueue *q,QueueElemType e) {
 2     QueueNode* node;
 3     node = (QueueNode*)malloc(sizeof(QueueNode));
 4     if (node!=NULL) {
 5         node->data = e;
 6         node->next = NULL;
 7         //结点从队尾进入
 8         q->rear->next = node;
 9         //队列的尾指针指向新尾结点
10         q->rear = node;
11         return true;
12     }
13     return false;
14 }

链队列出队操作:

 1 int DeleteQueue(LinkQueue *q,QueueElemType *e) {
 2     QueueNode* p;
 3     //判断是否队空
 4     if (q->front==q->rear) {
 5         return false;
 6     }
 7     p = q->front->next;
 8     //队首元素出队
 9     q->front->next = p->next;
10     if (q->rear==p) {
11         q->rear = q->front;
12     }
13     //记录出队元素
14     *e = p->data;
15     free(p);
16     return true;
17 }

打印链队列内元素:

 1 void printfQueue(LinkQueue *q) {
 2     QueueNode* p;
 3     p = q->front->next;
 4     printf("队内元素:");
 5     while (p!=NULL)
 6     {
 7         printf("%d ", p->data);
 8         p = p->next;
 9     }
10     printf("\n");
11 }

主函数:

 1 int main() {
 2     LinkQueue q;
 3     QueueElemType e;
 4     //初始化链队列
 5     InitQueue(&q);
 6     //元素入队
 7     EnterQueue(&q, 10);
 8     EnterQueue(&q, 20);
 9     EnterQueue(&q, 30);
10     printfQueue(&q);
11     //元素出队
12     DeleteQueue(&q,&e);
13     printf("出队元素:%d\n",e);
14     printfQueue(&q);
15     return 0;
16 }

 

posted @ 2020-11-16 19:27  笺笙  阅读(170)  评论(0编辑  收藏  举报