顺序队列的表示和实现
表示
typedef struct {data_t data[N];int front; /* front always points to the "cycle-head",* i.e. point to the previous postion of queue front*/int rear; /* rear point to the rear postion element of the queue */}sequeue_t;
实现
sequeue_t *CreateEmptySequeue(void) {sequeue_t *queue;queue = (sequeue_t *)malloc(sizeof(sequeue_t));if (NULL != queue) {queue->front = queue->rear = 0;return queue;} else {return NULL;} }int ClearSequeue(sequeue_t *queue) {if (NULL != queue) {queue->front = queue->rear = 0;return 0;} else {return -1;} }int DestroySequeue(sequeue_t *queue) {if (NULL != queue) {free(queue);return 0;} else {return -1;} }int EmptySequeue(sequeue_t *queue) {if (NULL != queue) {return (queue->front == queue->rear ? 1 : 0);} else {return -1;} }int FullSequeue(sequeue_t *queue) {if (NULL != queue) {return ((queue->rear + 1) % N == queue->front ? 1 : 0); } else {return -1;} }int EnQueue(sequeue_t *queue, data_t x) {if (NULL == queue) return -1;if (FullSequeue(queue)) return -1;queue->rear = (queue->rear + 1)%N;queue->data[queue->rear] = x;return 0; }int DeQueue(sequeue_t *queue, data_t *x) {if (NULL == queue) return -1;if (EmptySequeue(queue)) return -1;if (NULL != x) {queue->front = (queue->front + 1) % N;*x = queue->data[queue->front];}return 0; }
测试代码
void iterate_queue(sequeue_t * queue) {int i;data_t a[N];if (!queue) return;for (i = 0; i < N; i++) {a[i] = '_';}i = queue->front;a[i] = 'x';while (i != queue->rear) {i++;i = i % N;a[i]= queue->data[i];}printf("queue = (f(%d),r(%d)) {", queue->front, queue->rear);for (i = 0; i < N; i++) {printf("%c ", a[i]);}printf("\b}\n"); }int main() {int i;data_t data;sequeue_t *queue;queue = CreateEmptySequeue();printf("First round!-----------------------------------------------\n");for (i = 0; i < 20; i++) {if ( !FullSequeue(queue) ) {printf("Enter %c: ", '1' + i);EnQueue(queue, '1' + i);iterate_queue(queue);} else {printf("queue is full\n");break;}}while ( !EmptySequeue(queue) ){DeQueue(queue, &data);printf("Out %c: ", data);iterate_queue(queue);}printf("Second round!----------------------------------------------\n");for (i = 0; i < 20; i++) {if ( !FullSequeue(queue) ) {printf("Enter %c: ", '1' + i);EnQueue(queue, '1' + i);iterate_queue(queue);} else {printf("queue is full\n");break;}}while ( !EmptySequeue(queue) ){DeQueue(queue, &data);printf("Out %c: ", data);iterate_queue(queue);}DestroySequeue(queue);return 0; }
结果
First round!----------------------------------------------- Enter 1: queue = (f(0),r(1)) {x 1 _ _ _ _ _ _ _ _} Enter 2: queue = (f(0),r(2)) {x 1 2 _ _ _ _ _ _ _} Enter 3: queue = (f(0),r(3)) {x 1 2 3 _ _ _ _ _ _} Enter 4: queue = (f(0),r(4)) {x 1 2 3 4 _ _ _ _ _} Enter 5: queue = (f(0),r(5)) {x 1 2 3 4 5 _ _ _ _} Enter 6: queue = (f(0),r(6)) {x 1 2 3 4 5 6 _ _ _} Enter 7: queue = (f(0),r(7)) {x 1 2 3 4 5 6 7 _ _} Enter 8: queue = (f(0),r(8)) {x 1 2 3 4 5 6 7 8 _} Enter 9: queue = (f(0),r(9)) {x 1 2 3 4 5 6 7 8 9} queue is full Out 1: queue = (f(1),r(9)) {_ x 2 3 4 5 6 7 8 9} Out 2: queue = (f(2),r(9)) {_ _ x 3 4 5 6 7 8 9} Out 3: queue = (f(3),r(9)) {_ _ _ x 4 5 6 7 8 9} Out 4: queue = (f(4),r(9)) {_ _ _ _ x 5 6 7 8 9} Out 5: queue = (f(5),r(9)) {_ _ _ _ _ x 6 7 8 9} Out 6: queue = (f(6),r(9)) {_ _ _ _ _ _ x 7 8 9} Out 7: queue = (f(7),r(9)) {_ _ _ _ _ _ _ x 8 9} Out 8: queue = (f(8),r(9)) {_ _ _ _ _ _ _ _ x 9} Out 9: queue = (f(9),r(9)) {_ _ _ _ _ _ _ _ _ x} Second round!---------------------------------------------- Enter 1: queue = (f(9),r(0)) {1 _ _ _ _ _ _ _ _ x} Enter 2: queue = (f(9),r(1)) {1 2 _ _ _ _ _ _ _ x} Enter 3: queue = (f(9),r(2)) {1 2 3 _ _ _ _ _ _ x} Enter 4: queue = (f(9),r(3)) {1 2 3 4 _ _ _ _ _ x} Enter 5: queue = (f(9),r(4)) {1 2 3 4 5 _ _ _ _ x} Enter 6: queue = (f(9),r(5)) {1 2 3 4 5 6 _ _ _ x} Enter 7: queue = (f(9),r(6)) {1 2 3 4 5 6 7 _ _ x} Enter 8: queue = (f(9),r(7)) {1 2 3 4 5 6 7 8 _ x} Enter 9: queue = (f(9),r(8)) {1 2 3 4 5 6 7 8 9 x} queue is full Out 1: queue = (f(0),r(8)) {x 2 3 4 5 6 7 8 9 _} Out 2: queue = (f(1),r(8)) {_ x 3 4 5 6 7 8 9 _} Out 3: queue = (f(2),r(8)) {_ _ x 4 5 6 7 8 9 _} Out 4: queue = (f(3),r(8)) {_ _ _ x 5 6 7 8 9 _} Out 5: queue = (f(4),r(8)) {_ _ _ _ x 6 7 8 9 _} Out 6: queue = (f(5),r(8)) {_ _ _ _ _ x 7 8 9 _} Out 7: queue = (f(6),r(8)) {_ _ _ _ _ _ x 8 9 _} Out 8: queue = (f(7),r(8)) {_ _ _ _ _ _ _ x 9 _} Out 9: queue = (f(8),r(8)) {_ _ _ _ _ _ _ _ x _}
转载于:https://www.cnblogs.com/vsyf/p/4916500.html
顺序队列的表示和实现相关推荐
- 数据结构与算法(3-2)队列(顺序队列、循环队列与链队列)
目录 一.顺序队列 1.存储结构 2.入队和出队 总代码 二.循环队列 总代码: 三.链队列 1.存储结构 2.入队和出队 总代码 一.顺序队列 队列特征:先进后出.后进后出. 1.存储结构 //队列 ...
- 【数据结构】顺序队列的实现(C语言)
队列的基本概念及其描述 队列是一种特殊的线性表,它的特殊性在于队列的插入和删除操作分别在表的两端进行. 插入的那一端称为队尾,删除的那一端称为队首.队列的插入操作和删除操作分别称为进队和出队. 先进先 ...
- 队列学习笔记 顺序队列
//顺序队列操作 #define QUEUEMAX 15 typedef struct {DATA data[QUEUEMAX]; // 队列数组 int head; //队头 int tail; / ...
- 顺序队列相关操作(C语言实现)
#顺序队列相关操作(C语言实现) #include<stdio.h> #define Size 100 typedef int DataType; typedef struct {Data ...
- 顺序队列之C++实现
下面介绍下用C++实现的顺序队列,在VC6下调试通过. 1.文件组织形式 2.sq.h顺序队列类的说明 #ifndef _SQ_H_ #define _SQ_H_typedef int dataTyp ...
- c语言建立队列(顺序队列、循化队列和链式队列)
c语言建立队列 一.顺序队列 队列的顺序存储结构 顺序队列的讨论 "下溢"现象 "真上溢"现象 "假上溢"现象 二.如何解决"假上 ...
- c语言队列(顺序队列,循环队列,链式队列)
顺序队列 1.初始化: front=-1; rear=-1; 2.判空条件 font=rear; 3.队列已满条件 rear=max-1; 代码: #include<stdio.h> #i ...
- 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)...
还记得数据结构这个经典的分类图吧: 今天主要关注一下线性表. 什么是线性表 线性表的划分是从数据的逻辑结构上进行的.线性指的是在数据的逻辑结构上是线性的.即在数据元素的非空有限集中 (1) 存在唯一的 ...
- 【数据结构】队列-顺序队列、循环队列、链队、双端队列
定义 队列是只允许在一端进行插入,而在另一端进行删除的线性表. 队头(Front):允许删除的一端,又称为队首. 队尾(Rear): 允许插入的一端. 先进入队列的元素必然先离开队列,即先进先出(Fi ...
- 数据结构-队列之顺序队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作的 ...
最新文章
- Chrome Extension 检查视图(无效)处理方法
- ifm virtual check in part 2
- 实录 | 平安人寿资深算法工程师张智:人机交互场景下的知识挖掘
- IOS开发之表视图(UITableView)
- 设计模式之装饰者模式(一)
- SQLite数据库如何存储和读取二进制数据
- 服务器select与gevent
- html5可以用flash,HTML5网页可以直接看视频,不用flash吗,另外WP7为何不支持flash。。。HTML5网页...
- 如何动态改变Table Control的列抬头
- 高中计算机算计Access怎么做,Access非常简单实用的计算器
- 降采样_嫦娥五号,欢迎回家!我国首次地外天体采样返回任务圆满完成
- bagging boosting 随机森林 GBDT对比
- 将 exe 文件反编译为Python源代码
- 转载:C语言运算符优先级记忆口诀
- t999主页劫持/篡改木马
- 解决nasm汇编gdb无法单步调试
- 安卓客户端开发!如何试出一个Android开发者真正的水平?分享PDF高清版
- 对谈Jason Fox:如何导向探索
- epson连接计算机后无法打印,EPSON针式打印机连接正常无法打印解决
- Suker的进球庆祝动作
热门文章
- python导入csv文件-python读写csv文件
- python爬取贴吧所有帖子-通过python爬取贴吧数据并保存为word
- 怎样学好python-我们应该如何学好Python?
- python语言怎么学-Py列为黑客应该学的四种编程语言之一 新手该怎么学
- python爬虫入门实例-终于领会python爬虫入门示例
- python代码示例下载-python爬取音频下载的示例代码
- python语言入门与精通-终于懂得python从入门到精通教程
- python小程序-【Python精华】100个Python练手小程序
- python代码怎么运行-python代码如何运行
- python菜鸟基础教程-Python3 面向对象