表示

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

顺序队列的表示和实现相关推荐

  1. 数据结构与算法(3-2)队列(顺序队列、循环队列与链队列)

    目录 一.顺序队列 1.存储结构 2.入队和出队 总代码 二.循环队列 总代码: 三.链队列 1.存储结构 2.入队和出队 总代码 一.顺序队列 队列特征:先进后出.后进后出. 1.存储结构 //队列 ...

  2. 【数据结构】顺序队列的实现(C语言)

    队列的基本概念及其描述 队列是一种特殊的线性表,它的特殊性在于队列的插入和删除操作分别在表的两端进行. 插入的那一端称为队尾,删除的那一端称为队首.队列的插入操作和删除操作分别称为进队和出队. 先进先 ...

  3. 队列学习笔记 顺序队列

    //顺序队列操作 #define QUEUEMAX 15 typedef struct {DATA data[QUEUEMAX]; // 队列数组 int head; //队头 int tail; / ...

  4. 顺序队列相关操作(C语言实现)

    #顺序队列相关操作(C语言实现) #include<stdio.h> #define Size 100 typedef int DataType; typedef struct {Data ...

  5. 顺序队列之C++实现

    下面介绍下用C++实现的顺序队列,在VC6下调试通过. 1.文件组织形式 2.sq.h顺序队列类的说明 #ifndef _SQ_H_ #define _SQ_H_typedef int dataTyp ...

  6. c语言建立队列(顺序队列、循化队列和链式队列)

    c语言建立队列 一.顺序队列 队列的顺序存储结构 顺序队列的讨论 "下溢"现象 "真上溢"现象 "假上溢"现象 二.如何解决"假上 ...

  7. c语言队列(顺序队列,循环队列,链式队列)

    顺序队列 1.初始化: front=-1; rear=-1; 2.判空条件 font=rear; 3.队列已满条件 rear=max-1; 代码: #include<stdio.h> #i ...

  8. 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)...

    还记得数据结构这个经典的分类图吧: 今天主要关注一下线性表. 什么是线性表 线性表的划分是从数据的逻辑结构上进行的.线性指的是在数据的逻辑结构上是线性的.即在数据元素的非空有限集中 (1) 存在唯一的 ...

  9. 【数据结构】队列-顺序队列、循环队列、链队、双端队列

    定义 队列是只允许在一端进行插入,而在另一端进行删除的线性表. 队头(Front):允许删除的一端,又称为队首. 队尾(Rear): 允许插入的一端. 先进入队列的元素必然先离开队列,即先进先出(Fi ...

  10. 数据结构-队列之顺序队列

    队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾,进行删除操作的 ...

最新文章

  1. Chrome Extension 检查视图(无效)处理方法
  2. ifm virtual check in part 2
  3. 实录 | 平安人寿资深算法工程师张智:人机交互场景下的知识挖掘
  4. IOS开发之表视图(UITableView)
  5. 设计模式之装饰者模式(一)
  6. SQLite数据库如何存储和读取二进制数据
  7. 服务器select与gevent
  8. html5可以用flash,HTML5网页可以直接看视频,不用flash吗,另外WP7为何不支持flash。。。HTML5网页...
  9. 如何动态改变Table Control的列抬头
  10. 高中计算机算计Access怎么做,Access非常简单实用的计算器
  11. 降采样_嫦娥五号,欢迎回家!我国首次地外天体采样返回任务圆满完成
  12. bagging boosting 随机森林 GBDT对比
  13. 将 exe 文件反编译为Python源代码
  14. 转载:C语言运算符优先级记忆口诀
  15. t999主页劫持/篡改木马
  16. 解决nasm汇编gdb无法单步调试
  17. 安卓客户端开发!如何试出一个Android开发者真正的水平?分享PDF高清版
  18. 对谈Jason Fox:如何导向探索
  19. epson连接计算机后无法打印,EPSON针式打印机连接正常无法打印解决
  20. Suker的进球庆祝动作

热门文章

  1. python导入csv文件-python读写csv文件
  2. python爬取贴吧所有帖子-通过python爬取贴吧数据并保存为word
  3. 怎样学好python-我们应该如何学好Python?
  4. python语言怎么学-Py列为黑客应该学的四种编程语言之一 新手该怎么学
  5. python爬虫入门实例-终于领会python爬虫入门示例
  6. python代码示例下载-python爬取音频下载的示例代码
  7. python语言入门与精通-终于懂得python从入门到精通教程
  8. python小程序-【Python精华】100个Python练手小程序
  9. python代码怎么运行-python代码如何运行
  10. python菜鸟基础教程-Python3 面向对象