队列是一种特殊的线性表

队列仅在线性表的两端进行操作

队头(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函数的更多相关文章

  1. 线性表的顺序存储设计和实现 - API函数实现

    基本概念 设计与实现 插入元素算法 判断线性表是否合法 判断插入位置是否合法 把最后一个元素到插入位置的元素后移一个位置 将新元素插入 线性表长度加1 获取元素操作 判断线性表是否合法 判断位置是否合 ...

  2. 队列链式存储 - 设计与实现 - API函数

    队列相关基础内容参我的博文:队列顺序存储 - 设计与实现 - API函数 队列也是一种特殊的线性表:可以用线性表链式存储来模拟队列的链式存储. 主要代码: // linkqueue.h // 队列链式 ...

  3. 栈的顺序存储 - 设计与实现 - API实现

    Stack基本概念 栈是一种 特殊的线性表 栈仅能在线性表的一端进行操作 栈顶(Top):允许操作的一端 栈底(Bottom):不允许操作的一端 Stack的常用操作 创建栈 销毁栈 清空栈 进栈 出 ...

  4. Zigbee协议栈OSAL层API函数【转载】

              OSAL层提供了很多的API来对整个的协议栈进行管理.主要有下面的几类:信息管理.任务同步.时间管理.中断管理.任务管理.内存管理.电源管理以及非易失存储管理.看到这些管理是不是感 ...

  5. WINDOWS-API:API函数大全

    操作系统除了协调应用程序的执行.内存分配.系统资源管理外,同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务是一个函数),可以帮肋应用程序达到开启视窗.描绘图形.使用周边设备的目的,由 ...

  6. Windows API 函数列表 附帮助手册

    所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了. 帮助手册:700多个Windows API的函数手册 免费下载 API之网络函数 API之消息函数 API之 ...

  7. C#中可直接调用WIN32的API函数--USER32.DLL

    Win32的API函数可以直接在C#中直接调用,在做WinForm时还是很有帮助的.有时候直接调用Win32的API,可以很高效的实现想要的效果. using System; using System ...

  8. Socket 之 API函数介绍

    1.创建套接字──socket() 应用程序在使用套接字前,首先必须拥有一个套接字,系统调用socket()向应用程序提供创建套接字的手段,其调用格式如下: SOCKET PASCAL FAR soc ...

  9. API函数

    1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同 ...

随机推荐

  1. UISearchController替换UISearchDisplayController

    随着iOS 的升级,iOS 7的占有率更低了.Xcode 升级到Xcode 8之后,对iOS 应用支持的最低版本,iOS 7也被抛弃了.我在新项目中也是最低支持到iOS 8,因此工程里也是各种警告.首 ...

  2. Android应用UI设计流程

    Android应用UI设计流程 设计原理 1.在移动设计中,使用环境是最关键的因素.原型设计方法必须考虑尺寸因素 2.用户测试必须涵盖运动.声音和多点触控等方面: 进行移动设计和测试时,请将你知道的有 ...

  3. Android文件(File)操作

    Android 使用与其他平台上基于磁盘的文件系统类似的文件系统. 本文讲述如何使用 Android 文件系统通过 File API 读取和写入文件. File 对象适合按照从开始到结束的顺序不跳过地 ...

  4. android 网络工具 之Android-Volley的demo

    1.今天详细的研究了Volley的使用,下面来给大家介绍一下: Android Volley 是Google开发的一个网络lib,可以让你更加简单并且快速的访问网络数据.Volley库的网络请求都是异 ...

  5. android:shape属性详解

    这一类的shape定义在xml中 file location: res/drawable/filename.xml The filename is used as the resource ID.(这 ...

  6. unix os下du df简单用法

    转自:http://dadoneo.iteye.com/blog/984963 du命令参数详解见:http://baike.baidu.com/view/43913.htm 下面我们只对其做简单介绍 ...

  7. Redis主从和HA配置

    1同步原理 摘自:http://www.cnblogs.com/stephen-liu74/archive/2012/03/30/2364717.html "下面的列表清楚的解释了Redis ...

  8. UNIX网络编程——使用select函数编写客户端和服务器

    首先看原先<UNIX网络编程--并发服务器(TCP)>的代码,服务器代码serv.c: #include<stdio.h> #include<sys/types.h> ...

  9. [GitHub]第八讲:GitHub Pages

    Github Pages 是 github 公司提供的免费的静态网站托管服务,用起来方便而且功能强大,不仅没有空间限制,还可以绑定自己的域名.在 https://pages.github.com/ 首 ...

  10. Java进阶(三)Java安全通信:HTTPS与SSL

    通过一个系统,接触到了Java安全机制,故作一小节,供朋友们参考学习. 1. HTTPS概念 1)简介 HTTPS(全称:Hypertext Transfer Protocol over Secure ...