队列 - 顺序循环队列的基本运算(C语言)
2018-04-05 20:39
399 查看
循环队列sq中:
1. front(队头指针)指向实际队列元素的第一个元素的前一个位置,rear(队尾指针)指向实际队列元素的最后一个元素位置。(可根据需要自定义)2. 循环队列中的满并非真正意义上的满,即并不是所有的位置上都存储有元素,而是front和rear之间仍然隔着一个空位。若不隔此空位,当sq->rear == sq->front时,是满?还是空?。
3. 初始时:sq->front = sq->rear = 0;(初始化) 队空条件:sq->front == sq->rear;(判空) 队满条件:(sq->rear+1)%MaxLen == sq->front;(判满)
完整代码如下:
//queue.cpp - 顺序循环队列的基本运算 #include <iostream> #define MaxLen 20 //顺序队列的节点类型定义 typedef char ElementType; typedef struct queue { ElementType data[MaxLen]; //顺序队列的存储方式 - 一维数组 int front, rear; //front - 头指针、rear - 尾指针 } queue; //基本运算 void InitQueue(queue *sq); //初始化队列 bool EnQueue(queue *sq, ElementType x); //入队列 bool OutQueue(queue *sq, ElementType &x); //出队列 bool IsEmpty(queue *sq); //判空 bool IsFull(queue *sq); //判满 //具体实现 //初始化队列 void InitQueue(queue *sq) { sq->front = 0; sq->rear = 0; } //判空 bool IsEmpty(queue *sq) { if(sq->front == sq->rear) //队列为空 return true; else return false; } //判满 - 这里的满不是真正意义上的满,最满的情况时,front和rear之间还隔有一个空位 bool IsFull(queue *sq) { if( (sq->rear+1)%MaxLen == sq->front ) //队列上溢出 return true; else return false; } //入队列 bool EnQueue(qu 4000 eue *sq, ElementType x) { if( IsFull(sq) ) //队列已满,无法再入队列 return false; else { sq->rear = (sq->rear+1) % MaxLen; sq->data[sq->rear] = x; return true; } } //出队列 bool OutQueue(queue *sq, ElementType &x) { if( IsEmpty(sq) ) //队列为空,无法出队列 return false; else { sq->front = (sq->front+1) % MaxLen; x = sq->data[sq->front]; return true; } }
相关文章推荐
- 顺序队列(循环队列)基本操作实现 C语言
- 顺序循环队列的各种基本运算
- C语言——循环队列和链队列的基本运算
- 顺序循环队列的基本操作
- 循环队列——队列的顺序表示与实现(c语言)
- 编写一个程序,实现顺序环形队列的各种基本运算。
- 数据结构循环队列的基本操作(C语言)
- C语言实现循环队列基本操作(初始化、判断队空、入队、出队)
- 循环队列基本操作(C语言描述)
- 顺序循环队列的c语言实现
- 循环队列-顺序存储-c语言实现
- 顺序环形队列的各种基本运算
- C语言——栈的基本运算在顺序栈上的实现
- 顺序循环队列的基本操作
- C语言线性表循环队列的基本操作
- 基本数据结构,循环队列的顺序实现。
- 顺序循环队列基本操作(入队,出队,清空,销毁,历遍)
- 队列——顺序存储结构及其基本运算(循环队列)
- 循环顺序队列的基本操作
- 实现环形队列各种基本运算的算法(用顺序结构)