队列顺序存储 - 设计与实现 - 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 创建同 ...
随机推荐
- UISearchController替换UISearchDisplayController
随着iOS 的升级,iOS 7的占有率更低了.Xcode 升级到Xcode 8之后,对iOS 应用支持的最低版本,iOS 7也被抛弃了.我在新项目中也是最低支持到iOS 8,因此工程里也是各种警告.首 ...
- Android应用UI设计流程
Android应用UI设计流程 设计原理 1.在移动设计中,使用环境是最关键的因素.原型设计方法必须考虑尺寸因素 2.用户测试必须涵盖运动.声音和多点触控等方面: 进行移动设计和测试时,请将你知道的有 ...
- Android文件(File)操作
Android 使用与其他平台上基于磁盘的文件系统类似的文件系统. 本文讲述如何使用 Android 文件系统通过 File API 读取和写入文件. File 对象适合按照从开始到结束的顺序不跳过地 ...
- android 网络工具 之Android-Volley的demo
1.今天详细的研究了Volley的使用,下面来给大家介绍一下: Android Volley 是Google开发的一个网络lib,可以让你更加简单并且快速的访问网络数据.Volley库的网络请求都是异 ...
- android:shape属性详解
这一类的shape定义在xml中 file location: res/drawable/filename.xml The filename is used as the resource ID.(这 ...
- unix os下du df简单用法
转自:http://dadoneo.iteye.com/blog/984963 du命令参数详解见:http://baike.baidu.com/view/43913.htm 下面我们只对其做简单介绍 ...
- Redis主从和HA配置
1同步原理 摘自:http://www.cnblogs.com/stephen-liu74/archive/2012/03/30/2364717.html "下面的列表清楚的解释了Redis ...
- UNIX网络编程——使用select函数编写客户端和服务器
首先看原先<UNIX网络编程--并发服务器(TCP)>的代码,服务器代码serv.c: #include<stdio.h> #include<sys/types.h> ...
- [GitHub]第八讲:GitHub Pages
Github Pages 是 github 公司提供的免费的静态网站托管服务,用起来方便而且功能强大,不仅没有空间限制,还可以绑定自己的域名.在 https://pages.github.com/ 首 ...
- Java进阶(三)Java安全通信:HTTPS与SSL
通过一个系统,接触到了Java安全机制,故作一小节,供朋友们参考学习. 1. HTTPS概念 1)简介 HTTPS(全称:Hypertext Transfer Protocol over Secure ...