数据结构之队列
来源:互联网 发布:数据库审计系统报价 编辑:程序博客网 时间:2024/05/17 22:04
转自:http://www.cnblogs.com/kaituorensheng/archive/2013/02/28/2937865.html
队列特性:先进先出(FIFO)——先进队列的元素先出队列。来源于我们生活中的队列(先排队的先办完事)。
队列有下面几个操作:
- InitQueue() ——初始化队列
- EnQueue() ——进队列
- DeQueue() ——出队列
- IsQueueEmpty()——判断队列是否为空
- IsQueueFull() ——判断队列是否已满
队列可以由数组和链表两种形式实现队列操作(c语言),下面仅以数组为例:
数组实现:
队列数据结构
typedef struct queue{ int queuesize; //数组的大小 int head, tail; //队列的头和尾下标 int *q; //数组头指针}Queue;
InitQueue() ——初始化队列
void InitQueue(Queue *q){ q->queuesize = 8; q->q = (int *)malloc(sizeof(int) * q->queuesize); //分配内存 q->tail = 0; q->head = 0;}
这样有个缺陷,空间利用率不高。采用循环队列:
EnQueue() ——进队列
void EnQueue(Queue *q, int key){ int tail = (q->tail+1) % q->queuesize; //取余保证,当quil=queuesize-1时,再转回0 if (tail == q->head) //此时队列没有空间 { printf("the queue has been filled full!"); } else { q->q[q->tail] = key; q->tail = tail; }}
DeQueue() ——出队列
int DeQueue(Queue *q){ int tmp; if(q->tail == q->head) //判断队列不为空 { printf("the queue is NULL\n"); } else { tmp = q->q[q->head]; q->head = (q->head+1) % q->queuesize; } return tmp;}
IsQueueEmpty()——判断队列是否为空
int IsQueueEmpty(Queue *q){ if(q->head == q->tail) { return 1; } else { return 0; }}
IsQueueFull()——判断队列是否已满
int IsQueueFull(Queue *q){ if((q->tail+1)% q->queuesize == q->head) { return 1; } else { return 0; }}
0 0
- 数据结构之队列(链式队列)
- 数据结构之队列(数组队列)
- 数据结构之队列-顺序队列
- 数据结构之循环队列
- 数据结构之顺序队列
- 数据结构之链队列
- java数据结构之队列
- 数据结构之队列
- 数据结构复习之【队列】
- 内核数据结构之队列
- 数据结构之队列实例
- 数据结构学习之队列
- 复习数据结构之队列
- C 队列之数据结构
- 基础数据结构之队列
- 数据结构之队列
- 大话数据结构之队列
- 数据结构之循环队列
- 有关SCAN与VIP的试验(一)
- 解决ADT及SDK Manager 下载失败的问题
- 通过域名获取ip地址
- dubbo learning- day 1
- Mac下安装React native
- 数据结构之队列
- 3518E与3518C产品区别
- 无
- SSL(二)
- 黑马程序员——JavaSE基础_5
- 排序算法
- socket的一些事
- .NET学习之面向对象总结
- 艾格拉斯张鹏:重度手游防外挂及安全