数据结构-循环队列程序演示

  1 /*
  2 循环队列需要2个参数来确定;
  3 front,rear
  4 1)队列初始化
  5 front和rear的值都为零
  6 2)队列非空
  7 front代表的是队列的第一个元素
  8 rear代表的是队列的最后一个有效元素
  9 3)队列空
 10 front和rear的值相等,但不一定是零
 11 */
 12
 13
 14 /*
 15 队列
 16 定义:一种可以实现先进先出的存储结构
 17 分类:
 18 静态队列
 19 链式队列
 20 */
 21 #include <stdio.h>
 22 #include <malloc.h>
 23
 24 typedef struct Queue
 25 {
 26     int *pBase;
 27     int front;
 28     int rear;
 29 }QUEUE;
 30
 31 void init(QUEUE *);
 32 bool en_queue(QUEUE*, int val);
 33 void traverse_queue(QUEUE*);
 34 void out_queue(QUEUE *, int*);
 35 bool full_queue(QUEUE*);
 36 bool empty_queue(QUEUE*);
 37
 38 int main(void)
 39 {
 40     QUEUE Q;
 41     int val;
 42     init(&Q);
 43     en_queue(&Q, 0);
 44     en_queue(&Q, 1);
 45     en_queue(&Q, 2);
 46     en_queue(&Q, 3);
 47     en_queue(&Q, 4);
 48     en_queue(&Q, 5);
 49     en_queue(&Q, 6);
 50     en_queue(&Q, 7);
 51     en_queue(&Q, 8);
 52     traverse_queue(&Q);
 53     if (out_queue(&Q, &val))
 54     {
 55         printf("出队成功,队列出队的元素为:%d\n",val);
 56     }
 57     else
 58     {
 59         printf("出队失败!\n");
 60     }
 61     traverse_queue(&Q);
 62     return 0;
 63 }
 64
 65 void init(QUEUE *pQ)
 66 {
 67     pQ->pBase = (int*)malloc(sizeof(int) * 6);
 68     pQ->front = 0;
 69     pQ->rear = 0;
 70 }
 71
 72 bool en_queue(QUEUE *pQ, int val)
 73 {
 74     if (full_queue(pQ))
 75     {
 76         return false;
 77     }
 78     else
 79     {
 80         pQ->pBase[pQ->rear] = val;
 81         pQ->rear = (pQ->rear + 1) % 6;
 82         return true;
 83     }
 84 }
 85
 86 bool full_queue(QUEUE*pQ)
 87 {
 88     if (pQ->front == (pQ->rear+1)%6)
 89     {
 90         return true;
 91     }
 92     else
 93     {
 94         return false;
 95     }
 96 }
 97
 98 void traverse_queue(QUEUE *pQ)
 99 {
100     int i = pQ->front;
101     while (i != pQ->rear)
102     {
103         printf("%d ", pQ->pBase[i]);
104         i = (i + 1) % 6;
105     }
106     return;
107 }
108
109 bool empty_queue(QUEUE *pQ)
110 {
111     if (pQ->front == pQ->rear)
112     {
113         return true;
114     }
115     else
116     {
117         return false;
118     }
119 }
120
121 bool out_queue(QUEUE*pQ, int* pVal)
122 {
123     if (empty_queue(pQ))
124     {
125         return false;
126     }
127     else
128     {
129         *pVal = pQ->pBase[pQ->front];
130         pQ->front = (pQ->front + 1) % 6;
131         return true;
132     }
133 }

原文地址:https://www.cnblogs.com/hujianglang/p/9704263.html

时间: 2024-10-11 21:23:46

数据结构-循环队列程序演示的相关文章

47 _ 循环队列程序演示.swf

通过上面的分析我们已经对循环队列很了解了,现在我们来学习下循环队列的实现形式 1.代码使用数组现实循环队列 #include<stdio.h> #include<malloc.h> #include <stdio.h> #include <stdlib.h> typedef struct Queue{ int * data;//存储的数据,指向一个数组 int font ;//队列数据删除 int rear;//队列数据的添加 }QUEUE ,*PQUEUE

大话数据结构----循环队列和链式队列

队列(Queue) 是只允许在一端进行插入操作,而在另一端进行删除操作的线性表 队列的特点就是:先进先出,和生活中排队的例子是很先进的,排队的目的不就是先到先得吗. 生活中的队列相当于顺序存储的队列,在火车站排队买票,前面的人买完票走了,后面的人一个一个往前移一位,这是很正常的事情,而计算机中队列队列第一个元素出去了,后面的元素一个一个往前移,这是一件很降低效率的一件事.为了解决这种效率问题,计算机采用循环队列的方式操作队数据. 循环队列 队列的头尾相接的顺序存储结构称为循环队列. 1.首先循环

数据结构--循环队列

一.顺序队列的改进 队列元素的出列是在队头,即下标为0的位置,那也就意味着,队列中的所有元素都得向前移动,以保证队列的队头(也就是下标为0的位置)不为空,此时的时间复杂度为0(n). 可有时想想,为什么出队列时一定要全部移动呢,如果不去限制队列的元素必须存储在数组的前n个单元这一条件,出队的性能就会大大增加.也就是说,队头不需要一定在下标为0的位置,比如也可以是a[1]等. 而为了避免当只有一个元素时,队头和队尾重合使处理变得麻烦,引入两个指针,front指针指向队头元素,rear指针指向队尾元

数据结构 --- 循环队列(队列的顺序存储结构)

工程目录结构图: common.h: 1 //#ifndef __common_h__ 2 //#define __common_h__ 3 4 #define OK 1 5 #define ERROR 0 6 #define TRUE 1 7 #define FALSE 0 8 9 #define MAXSIZE 20 10 11 typedef int Status; //函数的返回结果,OK.ERREO.TRUE.FALSE 12 typedef int ElemType; //结点数据域

数据结构:循环队列及其基本操作的实现

/** * 循环队列 * 队列设置first指针直接指向队列头部元素,tail尾指针指向队列最后一个元素的后一个,即队列中总是预留一个空位 */ class CircleQueue implements Queue<Integer>{ private Integer[] queueArray = null; private int first; private int tail; private int maxSize; public CircleQueue(int max){ this.ma

数据结构Java实现07----队列:顺序队列&amp;顺序循环队列、链式队列、顺序优先队列

数据结构Java实现07----队列:顺序队列&顺序循环队列.链式队列.顺序优先队列 一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作. 队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头.队列的插入操作通常称作入队列,队列的删除操作通常称作出队列. 下图是一个依次向队列中插入数据元素a0,a1,...,an-

数据结构6_顺序队列(循环队列)

本文实现了顺序队列,与链队列不同的是,顺序队列需要考虑一个问题, 问题情况如下, 解决办法:循环队列,当rear到分配的数组空间末尾时,转到数组头 但是当q.rear==q.front时,又如何区分一种是空队列,一种是满队列的情况呢 这里有两种方案 本次代码实现了第一种方法,同时设置了一个技术变量length,稍加改动便可实现第二个方法 代码如下: #include<iostream>using namespace std;//该顺序队列为循环队列,解决队尾指针达到最大值,队列中有空闲单元,但

数据结构——队列及循环队列

说明:严蔚敏的<数据结构>(C语言版)学习笔记,记录一下,以备后面查看. #include <stdio.h> #include <stdlib.h> #define OK 1; #define ERROR -1; typedef int QElemType; typedef int Status; //定义队列节点 typedef struct QNode{ QElemType data; struct QNode *next; }QNode, *QueuePtr;

数据结构算法C语言实现(十二)--- 3.4循环队列&amp;队列的顺序表示和实现

一.简述 空队列的处理方法:1.另设一个标志位以区别队列是空还是满:2.少用一个元素空间,约定以队列头指针在队尾指针下一位置上作为队列呈满的状态的标志. 二.头文件 1 //3_4_part1.h 2 /** 3 author:zhaoyu 4 email:[email protected] 5 date:2016-6-9 6 note:realize my textbook <<数据结构(C语言版)>> 7 */ 8 //Page 64 9 #include <cstdio