队列是一种特殊的线性表
队列仅在线性表的两端进行操作 队头(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#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有关顺序存储表的相关内容,请參看我的还有一篇博文:#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;}
具体project代码: