队列顺序存储 - 设计与实现 - API函数
队列是一种特殊的线性表
队列仅在线性表的两端进行操作
队头(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函数实现
详细工程代码:Github
队列顺序存储 - 设计与实现 - API函数的更多相关文章
- 线性表的顺序存储设计和实现 - API函数实现
基本概念 设计与实现 插入元素算法 判断线性表是否合法 判断插入位置是否合法 把最后一个元素到插入位置的元素后移一个位置 将新元素插入 线性表长度加1 获取元素操作 判断线性表是否合法 判断位置是否合 ...
- 队列链式存储 - 设计与实现 - API函数
队列相关基础内容参我的博文:队列顺序存储 - 设计与实现 - API函数 队列也是一种特殊的线性表:可以用线性表链式存储来模拟队列的链式存储. 主要代码: // linkqueue.h // 队列链式 ...
- 栈的顺序存储 - 设计与实现 - API实现
Stack基本概念 栈是一种 特殊的线性表 栈仅能在线性表的一端进行操作 栈顶(Top):允许操作的一端 栈底(Bottom):不允许操作的一端 Stack的常用操作 创建栈 销毁栈 清空栈 进栈 出 ...
- Zigbee协议栈OSAL层API函数【转载】
OSAL层提供了很多的API来对整个的协议栈进行管理.主要有下面的几类:信息管理.任务同步.时间管理.中断管理.任务管理.内存管理.电源管理以及非易失存储管理.看到这些管理是不是感 ...
- WINDOWS-API:API函数大全
操作系统除了协调应用程序的执行.内存分配.系统资源管理外,同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务是一个函数),可以帮肋应用程序达到开启视窗.描绘图形.使用周边设备的目的,由 ...
- Windows API 函数列表 附帮助手册
所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了. 帮助手册:700多个Windows API的函数手册 免费下载 API之网络函数 API之消息函数 API之 ...
- C#中可直接调用WIN32的API函数--USER32.DLL
Win32的API函数可以直接在C#中直接调用,在做WinForm时还是很有帮助的.有时候直接调用Win32的API,可以很高效的实现想要的效果. using System; using System ...
- Socket 之 API函数介绍
1.创建套接字──socket() 应用程序在使用套接字前,首先必须拥有一个套接字,系统调用socket()向应用程序提供创建套接字的手段,其调用格式如下: SOCKET PASCAL FAR soc ...
- API函数
1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同 ...
随机推荐
- Scala:字符串
http://blog.csdn.net/pipisorry/article/details/52902348 Scala字符串 在 Scala 中,字符串的类型实际上是 Java String,它本 ...
- android混淆那些坑
ProGuard简介 在最新的Android Studio 2.2.2版本创建的Android工程中,module中的build.gradle有如下一段配置.这里的minifyEnabled即用来控制 ...
- Web自动化框架LazyUI使用手册(6)--8种控件对应的class,及可对其进行的操作
概述: 本文详述8种控件对应的class,及可对其进行的操作 回顾: 回顾一下,下文中的工具设计思路部分: http://blog.csdn.net/kaka1121/article/details/ ...
- 输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。
输入一个正数n,输出所有和为n连续正数序列.例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5.4-6和7-8. #define N 15 void findS ...
- OpenCV实时美颜摄像并生成H264视频流
为什么美颜摄像这么简单的功能,OpenCV这个开源项目网上很少有代码呢?对于在windows平台下,生成h264视频流也比价麻烦,没有现成的api可以使用,需要借助MinGw编译libx264,或者f ...
- 创建银行API
DECLARE lc_output VARCHAR2(3000); lc_msg_dummy VARCHAR2(3000); lc_return_status VARCHAR2(3000); lc_m ...
- 【Android应用开发】Android Studio 简介 (Android Studio Overview)
一. Intelij IDEA 环境简介 Android Studio 来源 : Android Studio 是 Intelij IDEA 的免费版本 + Android SDK 集成的; -- I ...
- tomcat中Servlet的工作机制
在研究Servlet在tomcat中的工作机制前必须先看看Servlet规范的一些重要的相关规定,规范提供了一个Servlet接口,接口中包含的重要方法是init.service.destroy等方法 ...
- Linux 内存管理之highmem简介
一.Linux内核地址空间 一般来说Linux 内核按照 3:1 的比率来划分虚拟内存(X86等):3 GB 的虚拟内存用于用户空间,1GB 的内存用于内核空间.当然有些体系结构如MIPS使用2:2 ...
- Maven2插件开发入门
一.创建Maven项目 首先创建一个Maven插件项目,可以手动或使用mvn archetype:create从原型创建.pom.xml配置如下: 1 2 3 4 5 6 7 8 9 10 11 12 ...