赞
踩
目录
举例:
现实生活中,去电影院先来的应该先买票就是队列的核心思想。
队列:FIFO(First Input First Output)
定义:
队列是一种特殊的线性结构,只允许在队列的首部进行删除操作(相当于排在最前面的先买票),这称为出队(即最先来的人买完票就应该走),而在队列的尾部进行插入(后来者排对在队尾)操作,这称为入队。
- 队头(front):允许进行删除的一端称为队首。
- 队尾(tail):允许进行插入的一端称为队首。
- 大小(size):队列能够排的最大数量加一
- 入队
- 出队
- 获取队头元素
- 判断队是否为空(队头与队尾相遇)
- 单向队列:只能在一端删除数据,另一端插入数据。
- 双向队列:两端都可以进行插入数据和删除数据操作。
以下均是单向队列的实现
1.数组方法
- #include<stdio.h>
- int main()
- {
- int q[100]={0,6,3,1,7,5,8,9,2,4},head,tail;
- head=1;
- tail=10;//初始化队列
-
- while(head<tail)//队列不为空
- {
- printf("%d ",q[head]);
- head++;
-
- q[tail]=q[head];
- tail++;
- head++;
- }
- getchar();
- return 0;
-
- }
2.结构体方法
- #include<stdio.h>
-
- struct queue{
- int data[100];//队列大小
- int head;//队首
- int tail;//队尾
-
- };
-
- int main()
- {
-
- struct queue q;
- q.head=1;
- q.tail=1;
- for(int i=1;i<10;i++)//向队列插入 9个数
- {
- scanf("%d",&q.data[q.tail]);
- q.tail++;
-
- }
- while(q.head<q.tail)//队列不为空
- {
- printf("%d ",q.data[q.head]);
- q.head++;
-
- q.data[q.tail]=q.data[q.head];
- q.tail++;
- q.head++;
- }
- getchar();
- return 0;
-
- }
可以对比,数组法与结构体法,其核心思想一样,只 是结构体将其所有定义封装成一个整体,在主函数main中就可以不用很麻烦的一直定义。
补充:其两种方法不同:
数组法在主函数中
int q[100]={0,6,3,1,7,5,8,9,2,4},head,tail;
head=1;
tail=10;
结构体法在主函数中只需定义: struct queue q;
虽然在这里看不出有很大差别,但是当代码量很大很大,有很多模块时,如果每个模块中均需要定义则很麻烦,结构体则省去了这些冗余。
- 队列先进先出
- 队列为空相当于队首等于队尾
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。