C语言数据结构-顺序队列
来源:互联网 发布:2017淘宝食品新规 编辑:程序博客网 时间:2024/04/28 21:06
顺序队列
顺序队列与顺序表相似,只不过其具有队列的运算规则。数据只能从队尾进,对头出,为先进先出方式。
分别用两个数来表示队头front和队尾rear的位置,其只能向前增加,不能退后,这样容易溢出且浪费空间,因此一般用循环队列来表示,及队列空间的首尾相连的,当达到队尾时可以跳转到最开始位置。
下面为顺序队列和循环队列的结构图:
循环队列一般用一个额外的数来表示队满或队空,或者空一个元素,用来测试尾指针加1是否等于头指针。
下面利用第一种方式实现队列及其相关运算:
#include <stdio.h>#define QueueSize 20//typedef int DataType ;#define DataType inttypedef struct { DataType data[QueueSize]; int front; int rear; int count;}Queue;//初始化队列void InitQueue(Queue *Q){ Q->front = 0; Q->rear = 0; Q->count = 0;}//队列是否为空int QueueEmpty(Queue *Q){ return (Q->count == 0);}//队列是否满int QueueFull(Queue *Q){ return (Q->count == QueueSize);}//入队void EnQueue(Queue *Q, DataType v){ if(QueueFull(Q)) printf("Error, the queue is full!"); Q->data[Q->rear] = v; Q->rear = (Q->rear+1)%QueueSize; //循环,防止rear大于QueueSize; Q->count++;}//出队DataType DeQueue(Queue *Q){ DataType i; if(QueueEmpty(Q)) printf("Error, the queue is empty"); i = Q->data[Q->front]; Q->front = (Q->front+1)%QueueSize; //循环 Q->count--; return i;}//读队头元素,不改变对状态DataType ReadQueue(Queue *Q){ DataType i; if(QueueEmpty(Q)) printf("Error, the queue is empty"); i = Q->data[Q->front]; return i;}int main(){ Queue Q, *Q1; int i = 1; InitQueue(&Q); while(i<=6) { EnQueue(&Q,i); i++; } printf("DeQueue: %d\n", DeQueue(&Q)); printf("DeQueue: %d\n", DeQueue(&Q)); printf("DeQueue: %d\n", ReadQueue(&Q)); EnQueue(&Q,9); printf("The queue :"); while(!QueueEmpty(&Q)) printf("%d\t",DeQueue(&Q)); Q1 = &Q; printf("\nThe length of the queue: %d", Q1->count); return 0;}
测试结果为:
DeQueue:1
DeQueue:2
DeQueue:3
The queue: 3 4 5 6 9
The length of the queue : 0
0 0
- C语言数据结构-顺序队列
- 数据结构-顺序队列(C语言)
- C语言数据结构-顺序队列-数组实现
- 数据结构-队列-顺序表实现-C语言
- C语言 顺序队列
- 数据结构之顺序队列的操作(C语言)
- 数据结构之顺序队列的操作(C语言)
- (C语言队列的顺序实现(数据结构十)
- [C++] 数据结构之顺序队列
- C数据结构-优化顺序队列
- C语言 数据结构 栈和队列 顺序栈(栈的顺序存储结构)
- 数据结构---C语言之队列的顺序表示和实现(循环队列)
- C语言数据结构-顺序表
- C语言数据结构-顺序栈
- 数据结构C语言顺序队
- C语言数据结构之-队列
- C语言数据结构之队列
- 数据结构.队列(C语言实现)
- 任何时代都会有迷茫
- BZOJ 1061: [Noi2008]志愿者招募(最小费用最大流)
- 学着休息——不会休息就不会工作
- 自定义单元格
- 第13章 字符串
- C语言数据结构-顺序队列
- C++ TCp通信遇到的无法解析外部符号
- 互联网的地位
- java 枚举
- eclipse中文乱码修改新方法,在修改了所有的utf-8都没有用就这样修改
- 20151011112722实验
- iOS 视频播放基础
- PHP计划任务:如何使用Linux的Crontab执行PHP脚本
- 【小白装系统】——U盘法简介