1. 队列的概念
什么是队列,听起来很高端,其实就是最普通的排队。
先排队的,先取票;先排队的,先取餐;先排队的,先上船;先排队的,先上岸。
队列,就是先进先出。
2. 队列的存储
首先队列也是一个一维数据结构,然后添加、和取出元素都是从头部操作即可。可以把队列看做从左到右排列的元素集合,添加元素和取出元素都是在左侧操作。
队列可以使用一位数组或者链表存储,使用数组的称为顺序队列,使用链表的称为链队列。
3. 队列的操作
老三样,遍历、添加、取出。
遍历,按顺序显示所有队列元素
添加,在队列左侧添加一个元素
取出,在队列左侧取出一个元素
4. 顺序队列的代码实现
不多说,都在酒里…sorry,都在代码里:
/* * 顺序队列实现 * 作者:熊猫大大 * 时间:2019-09-28 */ #include<stdio.h> #define QUEUE_LENGTH 100 //队列最大元素个数 // 队列结构体 struct Queue { int element[QUEUE_LENGTH];//队列元素 int head;//头部位置 int tail;//尾部位置 }; //遍历 void printQueue(struct Queue* p) { int position = p->head; printf("======队列遍历:"); while (position != p->tail) { printf("%d ", p->element[position]); position++; } printf("\n"); } //入队 int queueIn(struct Queue* p, int num) { //满了 if (p->tail>QUEUE_LENGTH - 1) { return 0;//入队失败 } p->element[p->tail] = num; p->tail++; return 1; } // 出队 int queueOut(struct Queue* p, int *result) { if (p->head == p->tail) return 0;//出队失败 *result = p->element[p->head++]; return 1; } // 测试 int main() { //初始化 struct Queue queue; queue.head = 0; queue.tail = 0; queueIn(&queue, 1); queueIn(&queue, 2); queueIn(&queue, 3); printQueue(&queue); int result; queueOut(&queue, &result); printf("出队:%d\n", result); queueOut(&queue, &result); printf("出队:%d\n", result); queueIn(&queue, 4); printQueue(&queue); return 1; }