队列顺序存储的实现及操作
来源:互联网 发布:mac apache 默认目录 编辑:程序博客网 时间:2024/04/27 12:03
队列顺序存储的实现及操作
普通的顺序存储的队列因其存储方式的问题出现假溢出的现象,即队头不在存储空间开始的位置,而队尾在存储空间的结束的位置,此时无法再入队新元素,但存储空间还未满。为了解决假溢出现象并使得队列空间得到充分利用,一个较巧妙的方法是将顺序队列看成一个环状的空间,即规定最后一个单元的后继为第一个单元,形象地称之为循环队列(circular Queue)。
示例代码
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 50typedef struct{ char element[MAXSIZE]; int front; int rear;}SeqQueue;void InitQueue(SeqQueue *Q);int IsEmpty(SeqQueue *Q);int EnQueue(SeqQueue *Q, char x);int DeQueue(SeqQueue *Q, char *x);int GetHead(SeqQueue *Q, char *x);void print_hyphen(int n);int main(void){ SeqQueue SQ; InitQueue(&SQ); if(SQ.front == SQ.rear) printf("循环队列初始化成功!\n"); else{ printf("循环队列初始化失败!\n"); exit(1); } int end = 0; int ope; char ch; while(!end){ print_hyphen(15); printf("\n"); printf("请输入指令来执行操作\n"); print_hyphen(15); printf("\n"); printf("1、入队\n2、出队\n3、取队头元素\n4、判断队列是否为空\n5、退出\n"); print_hyphen(15); printf("\n"); printf("输入要使用的功能的序号: "); scanf("%d", &ope); getchar(); switch(ope){ case 1: printf("请输入要入队的字符: "); scanf("%c", &ch); EnQueue(&SQ, ch); break; case 2: if(!DeQueue(&SQ, &ch)) printf("队列为空!\n"); else printf("出队的元素为: %c\n", ch); break; case 3: if(!GetHead(&SQ, &ch)) printf("队列为空!\n"); else printf("出队的元素为: %c\n", ch); break; case 4: if(IsEmpty(&SQ)) printf("队列为空!\n"); else printf("队列不为空! \n"); break; case 5: printf("再见!\n"); end = 1; break; default: printf("无此序号,请重新输入!\n"); } } return 0;}void InitQueue(SeqQueue *Q){ Q->front = Q->rear = 0;}int IsEmpty(SeqQueue *Q){ if(Q->front == Q->rear) return 1; else return 0;}int EnQueue(SeqQueue *Q, char x){ if((Q->rear+1)%MAXSIZE == Q->front) return 0; Q->element[Q->rear] = x; Q->rear = (Q->rear+1)%MAXSIZE; return 1;}int DeQueue(SeqQueue *Q, char *x){ if(Q->front == Q->rear) return 0; *x = Q->element[Q->front]; Q->front = (Q->front+1)%MAXSIZE; return 1;}int GetHead(SeqQueue *Q, char *x){ if(Q->front == Q->rear) return 0; *x = Q->element[Q->front]; return 1;}void print_hyphen(int n){ while(n--) printf("-");}
阅读全文
1 0
- 队列顺序存储的实现及操作
- 集合的顺序存储及操作实现
- 顺序队列及链队列的基本操作实现
- JAVA实现队列的顺序存储结构和操作
- 循环队列操作的实现-顺序存储结构
- 队列的顺序存储实现
- 队列的顺序存储及实现(C++版)
- Java基础 - 队列的顺序存储结构及实现
- 循环队列的顺序存储结构及实现
- JAVA实现队列 队列的链式存储结构及操作
- 【线性表】顺序存储、链式存储的实现及操作
- 2.3.1 队列及顺序存储实现
- 队列的顺序存储的基本操作.....
- 队列的顺序存储的基本操作.....
- 队列的顺序存储结构与操作
- 队列的顺序存储结构与操作
- 队列的顺序存储及其基本操作
- 队列的相关操作_顺序存储
- Ubuntu16.04从零开始配置QT+OPEN CV3.2+CONTRIB+CUDA8.0+CUDNN5.1+TENSORFLOW
- 【Scikit-Learn 中文文档】17 概率校准
- JavaScript--变量与常用属性
- 如何实现培训课程微信预约
- 纪念写挂的T3——Day2017.12.2
- 队列顺序存储的实现及操作
- JavaWeb学习笔记-java基础-11-打印M格式
- Solr Suggest搜索智能提示
- Java序谈之随机数大小比较和打印正三角形
- (floyd算法,即多源最短路算法)社交网络图中结点的“重要性”计算
- 分享一款MarkDown神器
- windows7环境下安装Linux(ubuntu64)虚拟机教程
- CheckBox获取值和赋值,使用js
- JavaScript 输出