队列

一.循环队列

   1.循环队列的定义

1 typedef struct
2 {
3     Decltype data[MAXSIZE];
4     int front, rear;
5 }CSeQueue;
View Code

   2.置队空

1 CSeQueue * InitCSeQueue()
2 {
3     CSeQueue *q;
4     q = (CSeQueue*)malloc(sizeof(CSeQueue));
5     q->front = q->rear = MAXSIZE - 1;
6     return q;
7 }
View Code

  3.入队

 1 int InSeQueue(CSeQueue *q, Decltype x)
 2 {
 3     if ((q->rear + 1) % MAXSIZE == q->front)
 4     {
 5         printf("队满");
 6         return false;
 7     }
 8     else
 9     {
10         q->rear = (q->rear + 1) % MAXSIZE;//入队时队尾指针
11         q->data[q->rear] = x;
12         return true;
13     }
14 }
View Code

 4.出队

 1 int OutSeQueue(CSeQueue *q, Decltype *x)
 2 {
 3     if (q->front == q->rear)
 4     {
 5         printf("空队");
 6         return false;
 7     }
 8     else
 9     {
10         q->front = (q->front + 1) % MAXSIZE;//出队时队头指针
11         *x = q->data[q->front]; //读出队头元素
12         return true;
13     }
14 }
View Code

5.判队空

1 int EmptySeQueue(CSeQueue *q)
2 {
3     if (q->front == q->rear)
4         return true;
5     else
6         return false;
7 }
View Code

二.链队列

 1.链队列数据类型描述

 1 typedef struct node
 2 {
 3     Decltype data;
 4     struct node *next;
 5 }QNode;//列队结点的类型
 6 typedef struct
 7 {
 8     QNode *front;
 9     QNode *rear;
10 }LQueue;//将头尾指针封装在一起的链队
11 LQueue *q //定义指向列队的指针
View Code

2.创建一个带头结点的空队

1 LQueue *init_LQueue()
2 {
3     LQueue *q, *p;
4     q = malloc(sizeof(LQueue));//申请头尾指针结点
5     p = malloc(sizeof(QNode));//申请链队头结点
6     p->next = NULL;
7     q->front = q->rear = p;
8     return q;
9 }
View Code

3.入队

1 void InitQueue(LQueue *q, Decltype x)
2 {
3     QNode *p;
4     p = malloc(sizeof(QNode));//申请新结点
5     p->data = x;
6     p->next = NULL;
7     q->rear->next = p;
8     q->rear = p;
9 }
View Code

4.判队空

1 int Empty_LQueue(LQueue *q)
2 {
3     if (q->front == q->rear)
4         return 0;
5     else return true;
6 }
View Code

5.出队

 1 int Out_LQueue(LQueue *q, Decltype x)
 2 {
 3     QNode *p;
 4     if (Empty_LQueue(q))
 5     {
 6         printf("队空");
 7         return false;
 8     }
 9     else
10     {
11         p = q->front->next;
12         q->front->next = p->next;
13         *x = p->data; 
14         free(p);
15         if (q->front->next == NULL)
16             q->rear = q->front;
17         //只有一个元素时,出队后队空,修改队尾指针
18         return true;
19     }
20 }
View Code

 

转载于:https://www.cnblogs.com/xyzyj/p/6555027.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值