队列的定义

队列:是一种特殊的线性表

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

队头:取出数据元素的一端

队尾:插入数据元素的一端

队列性质:先进先出(FIFO)

队列的实现之顺序存储

代码复用线性表的顺序存储

#include "SeqList.h"

#include "SeqQueue.h"

SeqQueue* SeqQueue_Create(int capacity) // O(1)  创建队列,队列是特殊的线性表,代码复用

{

return SeqList_Create(capacity);

}

void SeqQueue_Destroy(SeqQueue* queue) // O(1) 销毁队列

{

SeqList_Destroy(queue);

}

void SeqQueue_Clear(SeqQueue* queue) // O(1)  清空队列

{

SeqList_Clear(queue);

}

int SeqQueue_Append(SeqQueue* queue, void* item) // O(1)  队列中插入元素

//因为队列是从队尾插入元素,那就使用线性表在最后一个位置插入元素

{

return SeqList_Insert(queue, item, SeqList_Length(queue));

}

void* SeqQueue_Retrieve(SeqQueue* queue) // O(n)  出队列

//出队列是第一个元素,那就是返回线性表的第一个元素

{

return SeqList_Delete(queue, 0);

}

void* SeqQueue_Header(SeqQueue* queue) // O(1)   显示队列第一个元素

{

return SeqList_Get(queue, 0);

}

int SeqQueue_Length(SeqQueue* queue) // O(1)

{

return SeqList_Length(queue);

}

int SeqQueue_Capacity(SeqQueue* queue) // O(1)

{

return SeqList_Capacity(queue);

}

队列的实现之链式存储

代码复用线性表的链式存储

#include <malloc.h>

#include "LinkList.h"

#include "LinkQueue.h"

typedef struct _tag_LinkQueueNode     //创建一个结构体

{

LinkListNode header;     //数据域

void* item;   //指针域

} TLinkQueueNode;

LinkQueue* LinkQueue_Create() // O(1) //创建队列

{

return LinkList_Create();

}

void LinkQueue_Destroy(LinkQueue* queue) // O(n) //销毁队列

//要防止内存泄漏,首先将队列清空,然后再销毁

{

LinkQueue_Clear(queue);

LinkList_Destroy(queue);

}

void LinkQueue_Clear(LinkQueue* queue) // O(n)   队列清空

//因为队列是先进先出原则,所以要一个一个出队列

{

while( LinkQueue_Length(queue) > 0 )

{

LinkQueue_Retrieve(queue);

}

}

int LinkQueue_Append(LinkQueue* queue, void* item) // O(n)   进队列

{

TLinkQueueNode* node = (TLinkQueueNode*)malloc(sizeof(TLinkQueueNode));

int ret = (item != NULL) && (node != NULL);

if( ret )

{

node->item = item;

ret = LinkList_Insert(queue, (LinkListNode*)node, LinkList_Length(queue));

}

if( !ret )

{

free(node);

}

return ret;

}

void* LinkQueue_Retrieve(LinkQueue* queue) // O(1)

{

TLinkQueueNode* node = (TLinkQueueNode*)LinkList_Delete(queue, 0);

void* ret = NULL;

if( node != NULL )

{

ret = node->item;

free(node);

}

return ret;

}

void* LinkQueue_Header(LinkQueue* queue) // O(1)

{

TLinkQueueNode* node = (TLinkQueueNode*)LinkList_Get(queue, 0);

void* ret = NULL;

if( node != NULL )

{

ret = node->item;

}

return ret;

}

int LinkQueue_Length(LinkQueue* queue) // O(1)

{

return LinkList_Length(queue);

}

时间: 2024-12-08 20:30:51

队列的定义的相关文章

队列的定义与实现(C语言实现)

小时候.我们做早操的时候或者军训的时候,都排成一列,有头有尾.如果你迟到了,仅仅能站到最后面一个.退场的时候.都是由第一个先走的.这就是队列雏形. 队列的定义 队列是一种特殊的线性表 队列仅在线性表的两端进行操作 队头(Front):取出数据元素的一端 队尾(Rear):插入数据元素的一端 队列不同意在中间部位进行操作! 队列实质上也就是线性表的一种特殊操作形式,在头部删除.获取,在尾部加入. 跟栈基本类似,换烫不换药.详细能够參考 栈的实现与操作(C语言实现)  与栈一样,队列相同具备线性和链

队列的定义与操作——顺序存储和链式存储

队列的 存储结构 有 顺序存储 和 链式存储. 1. 队列的顺序存储与操作 (循环队列) 1 typedef int Position; 2 struct QNode { 3 ElementType *Data; // 存储元素的数组 4 Position Front, Rear; // 队列的 头.尾指针 5 int Cap; // 队列最大大容量 6 }; 7 typedef struct QNode *Queue; 8 9 // 操作集 10 Queue CreateQueue(int M

队列的定义与操作 链式存储

typedef struct Node *PtrToNode; struct Node { /* 队列中的结点 */     ElementType Data;     PtrToNode Next; }; typedef PtrToNode Position; struct QNode {     Position Front, Rear;  /* 队列的头.尾指针 */ int MaxSize;           /* 队列最大容量 */ }; typedef struct QNode *

数据结构之队列定义及基本操作实现

数据结构学着就是有意思,真诚推荐郝斌老师的数据结构视频,真的讲解的非常详细,容易理解. 一直在跟着郝斌老师的数据结构视频学习,看完了队列的视频,记录下来,总结一下. 队列的定义:队列是一种特殊的线性表,只允许在表的头部(front处)进行删除操作,在表的尾部(rear处)进行插入操作的线性数据结构,这种结构就叫做队列.进行插入操作的一端称为队尾,进行删除操作的一端称为队尾. 队列的类型:链式队列,即用链表实现的队列.静态队列:即用数组实现的队列.在这里,我们采用用数组实现的静态队列.因为用链表实

Linux进程间通信 -- 消息队列 msgget()、msgsend()、msgrcv()、msgctl()

下面来说说如何用不用消息队列来进行进程间的通信,消息队列与命名管道有很多相似之处.有关命名管道的更多内容可以参阅我的另一篇文章:Linux进程间通信 -- 使用命名管道 一.什么是消息队列 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法.  每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构.我们可以通过发送消息来避免命名管道的同步和阻塞问题.但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制. Linux用宏MSGMAX和MSGMNB来限制一条

条带深度 队列深度 NCQ IOPS

http://blog.csdn.net/striping/article/details/17449653 IOPS 即I/O per second,即每秒进行读写(I/O)操作的次数,多用于数据库等场合,衡量随机访问的性能. 并发IO的概念:并发IO,指多个IO可以同时被处理,比如IO1可以访问a盘,IO2可以同时访问b盘.并发IO的反义词是顺序IO. 条带深度:raid5的128KB条带,128KB条带=磁盘数量乘以每个磁盘上组成这个条带的segment大小,也就是说一个条带把排列的多个磁

队列(Queue)

队列的定义--Queue 队列是只允许在表的队尾插入,在表的队头进行删除.队列具有先进先出的特性(FIFO, First In First Out). 队列提供了下面的操作 q.empty() 如果队列为空返回true,否则返回false q.size() 返回队列中元素的个数 q.pop() 删除队列首元素但不返回其值 q.front() 返回队首元素的值,但不删除该元素 q.push() 在队尾压入新元素 q.back() 返回队列尾元素的值,但不删除该元素 队列的实现 下面是用C++实现的

3-7-队列的链式存储-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第3章  栈和队列 - 队列的链式存储 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h        相关测试数据下载  链接? 无数据    

【数据结构】之队列的java实现(一)

队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表. (1)允许删除的一端称为队头(Front). (2)允许插入的一端称为队尾(Rear).(3)当队列中没有元素时称为空队列.(4)队列亦称作先进先出(First In First Out)的线性表,简称为FIFO表. 队列的修改是依先进先出的原则进行的.新来的成员总是加入队尾,每次离开的成员总是队列头上的(不允许中途离队). 队列的存储结构及实现 队列的顺序存储结构 (1) 顺序队列的定义: 队列的顺序存储结构称为