队列是一种特殊的线性表

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

队头(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. Hadoop的RPC通信原理

    RPC调用: RPC(remote procedure call)远程过程调用: 不同java进程间的对象方法的调用. 一方称作服务端(server),一方称为客户端(client): server端 ...

  2. SpringMVC基础配置(通过注解配置,非xml配置)

    SpringMVC是什么,有多火,我这里就不再啰嗦了,SpringMVC比Struts2好用太多,我在学校的时候私下里两种都接触过,对比之后果断选择了SpringMVC,后来在做Android应用开发 ...

  3. iOS网络基础

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51376048 本文出自:[openXu的博客] 常用类 get请求 post请求 NSURL ...

  4. Android Multimedia框架总结(一)MediaPlayer介绍之状态图及生命周期

    请尊重分享成果,转载请注明出处: http://blog.csdn.net/hejjunlin/article/details/52349221 前言:从本篇开始,将进入Multimedia框架,包含 ...

  5. 剑指Offer——网易校招内推笔试题+模拟题知识点总结

    剑指Offer--网易校招内推笔试题+模拟题知识点总结 前言 2016.8.2 19:00网易校招内推笔试开始进行.前天晚上利用大约1小时时间完成了测评(这个必须做,关切到你能否参与面试).上午利用2 ...

  6. ios zxing扫码问题

    在ios 中 扫瞄二维码,条形码基本有 2中第三方的库,一个是zbar 一个是zxing,zxing 在android中表现的比较出色,但是在ios 中不是很好用,扫瞄效率低,我们一般都用zbar,但 ...

  7. Java开发各层对象含义 PO,VO,DAO,BO,POJO

    java的几种对象(PO,VO,DAO,BO,POJO)解释     一.PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中 ...

  8. 软考下午题详解---uml图

    在上篇博客中,小编主要简单的对软考下午题当中的数据流图设计进行了一系列总结,今天我们继续来看软考下午题当中大题部分,uml图的相关知识,在我们学习的过程中,我们也已经接触过,西安交大刘惠老师讲解过um ...

  9. 【一天一道LeetCode】#171. Excel Sheet Column Number

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  10. Java-IO之管道(PipedInputStream和PipedOutputStream)

    java中PipedInputStream和PipedOutputStream分别是管道输入流和管道输出流,它的作用是让多线程可以通过管道进行线程间的通讯,在使用管道通信时,必须将PipedInput ...