线性表(List)---队列的顺序存储
来源:互联网 发布:淘宝手机壳销量 编辑:程序博客网 时间:2024/05/17 16:14
队列的顺序存储结构的设计与实现
栈的介绍
定义: 队列是一种特殊的线性表,队列仅在线性表的两端进行操作。
队头(Front): 取出数据元素的一端。*
队尾(Rear): 插入数据元素的一端。
队列的常用操作
(1)创建队列
(2)销毁队列
(3)进队列
(4)出队列
(5)获取队列头部元素
(6)获取队列的长度
队列顺序存储结构的设计
队列的顺序存储模型
队列顺序存储结构的实现
因为队列是一种特殊的线性表,所以我们可以重复利用顺序表的顺序存储中的代码,在此基础上实现队列的顺序存储。
- SeqQueue.h
#ifndef _SEQQUEUE_H_#define _SEQQUEUE_H_typedef void SeqQueue;typedef void SeqQueueNode;//创建队列SeqQueue *SeqQueue_Create(int capacity);//销毁队列void SeqQueue_Destroy(SeqQueue *queue);//清空队列void SeqQueue_Clear(SeqQueue *queue);//进队列int SeqQueue_Append(SeqQueue *queue, SeqQueueNode *item);//出队列SeqQueueNode *SeqQueue_Retrieve(SeqQueue *queue);//获取对头元素SeqQueueNode *SeqQueue_Header(SeqQueue *queue);//获取队列长度int SeqQueue_Lenght(SeqQueue *queue);//获取队列容量int SeqQueue_Capacity(SeqQueue *queue);#endif // !_SEQQUEUE_H_
- SeqQueue.c
#include <stdio.h>#include <stdlib.h>#include <string.h>#include "SeqQueue.h"#include "seqlist.h"//队列是一中特殊的线性表//创建队列 相当于创建一个顺序存储的线性表SeqQueue *SeqQueue_Create(int capacity){ return (SeqlistNode *)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, SeqQueueNode *item){ return SeqList_Insert(queue, item, SeqList_Length(queue));}//出队列 相当于从线性表中删除0号位置元素SeqQueueNode *SeqQueue_Retrieve(SeqQueue *queue){ return (SeqlistNode *)SeqList_Delete(queue,0);}//获取对头元素 相当于获取线性表中0号位置元素SeqQueueNode *SeqQueue_Header(SeqQueue *queue){ return (SeqlistNode *)SeqList_Get(queue, 0);}//获取队列长度 相当于获取线性表的长度int SeqQueue_Lenght(SeqQueue *queue){ return SeqList_Length(queue);}//获取队列容量 相当于获取线性表的容量int SeqQueue_Capacity(SeqQueue *queue){ return SeqList_Capacity(queue);}
- SeqQueue集成测试框架
#include <stdio.h>#include <stdlib.h>#include <string.h>#include "SeqQueue.h"void main(){ int i = 0, ret = 0; int a[10]; SeqQueue *queue = SeqQueue_Create(10); if (queue == NULL) { printf("func SeqQueue_Create() (queue == NULL) err\n"); return; } //入队列 for (; i < 5; i++) { a[i] = i + 1; ret = SeqQueue_Append(queue, (SeqQueueNode *)&a[i]); if (ret != 0) { printf("func SeqQueue_Append() (ret != 0) err:%d\n", ret); return; } } //打印队列的属性 printf("len:%d\n", SeqQueue_Lenght(queue)); printf("capacity:%d\n", SeqQueue_Capacity(queue)); printf("header:%d\n", *((int *)SeqQueue_Header(queue))); //出队列 while (SeqQueue_Lenght(queue)) { int *tmp = (int *)SeqQueue_Retrieve(queue); if (tmp == NULL) { printf("func SeqQueue_Retrieve() (tmp == NULL) err\n"); return; } printf("tmp: %d\n", *tmp); } SeqQueue_Destroy(queue); return;}
- 结果截图
阅读全文
1 0
- 线性表(List)---队列的顺序存储
- 线性表(List)---栈的顺序存储
- 线性表(List)---队列的链式存储
- 数据结构之线性表——队列的顺序存储
- 线性表(List)---顺序存储结构
- 线性表顺序存储(List)
- 特殊的线性表-队列-顺序队列
- 线性表的顺序存储
- 顺序存储的线性表
- 线性表的顺序存储
- 线性表的顺序存储
- 线性表的顺序存储
- 线性表的顺序存储
- 线性表的顺序存储
- 线性表的顺序存储
- 线性表的顺序存储
- 线性表的顺序存储
- 线性表的顺序存储
- java的内部类-----更优雅的设计程序结构
- python 数字类型和字符串类型的相互转换
- 条件编译
- 关于js原型的经典面试题解析
- photoshop cs 安装及使用
- 线性表(List)---队列的顺序存储
- Python:数字在排序数组中出现的次数
- 捉鸡的十大算法简单学习,整理的相当乱
- C++实现顺序表->单链表->双向链表
- Twitter上值得关注的30个人工智能专家账号!
- Laravel第三方包报class not found
- Scala中函数组合器用法
- 线性表(List)---队列的链式存储
- 89和12单片机的I2C通信时序问题