队列顺序存储 - 设计与实现 - API函数
2023-09-11 14:14:42 时间
队列是一种特殊的线性表
队列仅在线性表的两端进行操作
队头(Front):取出数据元素的一端
队尾(Rear):插入数据元素的一端
队列不同意在中间部位进行操作!
queue经常使用操作
销毁队列
清空队列
进队列
出队列
获取队头元素
获取队列的长度
队列也是一种特殊的线性表;能够用线性表顺序存储来模拟队列。
主要代码:
// seqqueue.h // 顺序存储队列API声明 #ifndef _MY_SEQQUEUE_H_ #define _MY_SEQQUEUE_H_ typedef void SeqQueue; // 创建队列 SeqQueue* SeqQueue_Create(int capacity); // 销毁队列 void SeqQueue_Destroy(SeqQueue* queue); // 清空队列 void SeqQueue_Clear(SeqQueue* queue); // 入队列 int SeqQueue_Append(SeqQueue* queue, void* item); // 出队列 void* SeqQueue_Retrieve(SeqQueue* queue); // 获取对头元素 void* SeqQueue_Header(SeqQueue* queue); // 获取队列长度 int SeqQueue_Length(SeqQueue* queue); // 获取队列容量 int SeqQueue_Capacity(SeqQueue* queue); #endif //_MY_SEQQUEUE_H_
// seqqueue.cpp // 顺序存储队列API实现 // 调用了顺序存储表的API #include <stdio.h> #include "seqqueue.h" #include "seqlist.h" // 创建队列相当于创建一个链表 SeqQueue* SeqQueue_Create(int capacity) { return SeqList_Create(capacity); } // 销毁队列相当于销毁链表 void SeqQueue_Destroy(SeqQueue* queue) { SeqList_Destroy(queue); return; } // 清空队列相当于清空链表 void SeqQueue_Clear(SeqQueue* queue) { SeqList_Clear(queue); return; } // 入队列相当于在链表尾部插入元素 int SeqQueue_Append(SeqQueue* queue, void* item) { return SeqList_Insert(queue, item, SeqList_Length(queue)); } // 出队列相当于删除链表0号位置的元素 void* SeqQueue_Retrieve(SeqQueue* queue) { return SeqList_Delete(queue, 0); } // 获取对头元素相当于获取链表0号位置元素 void* SeqQueue_Header(SeqQueue* queue) { return SeqList_Get(queue, 0); } // 获取队列长度相当于获取链表长度 int SeqQueue_Length(SeqQueue* queue) { return SeqList_Length(queue); } // 获取队列容量相当于获取链表容量 int SeqQueue_Capacity(SeqQueue* queue) { return SeqList_Capacity(queue); }
// main.cpp // 顺序存储队列API的測试程序 #include <stdio.h> #include "seqqueue.h" const int maxn = 10; void play() { int i = 0, a[maxn]; SeqQueue *sq = NULL; for (i = 0; i < maxn; ++i) { a[i] = i + 1; } sq = SeqQueue_Create(20); // 创建队列 // 入队列 for (i = 0; i < maxn; ++i) { SeqQueue_Append(sq, &a[i]); } // 获取队列属性 printf("header: %d\n", *((int *)SeqQueue_Header(sq))); printf("length: %d\n", SeqQueue_Length(sq)); printf("capacity: %d\n", SeqQueue_Capacity(sq)); // 出队列 while (SeqQueue_Length(sq)) { int tmp = *((int *)SeqQueue_Retrieve(sq)); printf("%d\n", tmp); } SeqQueue_Destroy(sq); } int main() { play(); return 0; }
有关顺序存储表的相关内容,请參看我的还有一篇博文:线性表的顺序存储设计和实现 - API函数实现
具体project代码:Github
相关文章
- C# 消息队列
- 延迟队列的常用的实现方式
- C语言数据结构---队列
- 消息队列(MQ)重磅推出MQTT移动物联套件
- 《SAFe 4.0参考指南:精益软件与系统工程的规模化敏捷框架》一2.6 原则#6——可视化和限制在制品,减少批次规模,管理队列长度
- C++中TCP socket中接收和发送是不同的两个缓存区,接收远程数据时收到的数据都被填入接收缓冲区,什么时候接收什么时候清空,接收一个清空一个类似于队列。
- 剑指 Offer 09. 用两个栈实现队列
- LeetCode239之滑动窗口最大值(相关话题:单调队列)
- 86、【栈与队列】leetcode ——39. 滑动窗口最大值:单调队列+滑动窗口(C++版本)
- 【容器适配器/栈队列】题解+详细备注(共7题)
- 几百万消息在消息队列里积压了几个小时
- 消息队列系列(四):Rabbitmq常用命令行
- Java并发包中的同步队列SynchronousQueue实现原理
- [LeetCode] 899. Orderly Queue 有序队列
- 16数据结构与算法分析之---链式队列
- 【bzoj1692】[Usaco2007 Dec]队列变换 贪心+后缀数组