队列
来源:互联网 发布:淘宝大数据 编辑:程序博客网 时间:2024/06/16 21:19
队列特性:先进先出(FIFO)——先进队列的元素先出队列。
队列有下面几个操作:
- InitQueue() ——初始化队列
- EnQueue() ——进队列
- DeQueue() ——出队列
- IsQueueEmpty() ——判断队列是否为空
- IsQueueFull() ——判断队列是否已满
队列数据结构:
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
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- pycharm显示行号
- C++关于代码重用的那些事
- OpenWRT数据接收过程 二
- Linux Shell中的特殊符号和含义简明总结(包含了绝大部份)
- linux can 总线socket接口测试使用
- 队列
- vim命令
- Node
- 工业过程自动化云计算技术正在兴起
- c++11中的智能指针
- 如何让两个switch的位置相同
- 386. Lexicographical Numbers
- jstl标签把字符串格式化为日期
- Learning to Rank for IR的评价指标—MAP,NDCG,MRR