顺式队列(循环队列)8种操作的实现
来源:互联网 发布:ubuntu查看显卡信息 编辑:程序博客网 时间:2024/06/05 04:00
操作
时间复杂度(T(n))
空间复杂度(S(n))
求长度
O(1)
O(1)
判断是否为空
O(1)
O(1)
得到队首元素
O(1)
O(1)
插入元素
O(1)
O(1)
删除元素
O(1)
O(1)
清空队列
O(1)
O(1)
判断是否已满
O(1)
O(1)
/* 数据结构分析与学习专栏* Copyright (c) 2015, 山东大学计算机科学与技术专业学生* All rights reserved.* 作 者: 高祥* 完成日期: 2015 年 4 月 6 日* 版 本 号:013 *任务描述:针对链式队列,实现8个基本操作* 1:建立队列 ;* 2:输出队列 ;* 3:求队列的长度 ;* 4:判断队列是否为空 ;* 5:得到队列的队首元素;* 6:向队列中插入元素(插在队尾) ;* 7:删除队列的元素(删除队首元素);* 8: 清空队列; *主要函数:* 1. InitQueue(Queue &Q);//初始化队列* 2. CreateQueue(Queue &Q);//创建队列* 3. Output(Queue Q);//输出队列元素* 4. int QueueLength(Queue Q);//求队列的长度* 5. IsEmpty(Queue Q);//判断队列是否为空* 6. IsFull(Queue Q);//判断队列是否已满* 7. GetHead(Queue Q);//得到队列首元素* 8. EnQueue(Queue &Q,ElemType elem);//插入元素* 9.DeQueue(Queue &Q);//删除元素* 10. ClearQueue(Queue &Q);//清空队列 */#include<iostream>#include<cstdlib>using namespace std; #define OK 1#define FALSE 0#define MAXSIZE 10 typedef int ElemType;typedef int Status; typedef struct{ ElemType *base;//存储元素空间的指针 int first;//头指针:始终指向非空队列的首元素位置 int last;//尾指针:始终指向非空队列的最后一个元素的下一个位置} Queue; Status InitQueue(Queue &Q);//初始化队列void CreateQueue(Queue &Q);//创建队列void Output(Queue Q);//输出队列元素int QueueLength(Queue Q);//求队列的长度Status IsEmpty(Queue Q);//判断队列是否为空Status IsFull(Queue Q);//判断队列是否已满void GetHead(Queue Q);//得到队列首元素Status EnQueue(Queue &Q,ElemTypeelem);//插入元素void DeQueue(Queue &Q);//删除元素void ClearQueue(Queue &Q);//清空队列void Interaction(); int main(){ Queue Q; Interaction(); int operate; while(cin>>operate) { switch(operate) { case 0: return 0; case 1: CreateQueue(Q); break; case 2: Output(Q); break; case 3: cout<<"队列的长度为:"<<QueueLength(Q)<<endl; break; case 4: if(IsEmpty(Q)) { cout<<"队列为空。\n"; } else { cout<<"队列不为空。\n"; } break; case 5: GetHead(Q); break; case 6: cout<<"请输入要插入的元素:"; ElemType elem; cin>>elem; if(EnQueue(Q,elem)) { cout<<"新队列为:"; Output(Q); } break; case 7: DeQueue(Q); break; case 8: ClearQueue(Q); break; default: cout<<"请输入正确的操作数字!\n"; break; } } return 0;} Status InitQueue(Queue &Q)//初始化队列{ Q.base=(ElemType *)malloc(MAXSIZE*sizeof(ElemType)); //分配MAXSIZE个存储元素的空间,实际用于存储的有MAXSIZE-1个空间, //少用的一个空间用于表示”队列头指针在队列尾指针的下一位置(环状上)“时队列为满 if(!Q.base) { cout<<"内存非配失败。\n"; return FALSE; } Q.first=Q.last=0;//初始化队列为空 return OK;} void CreateQueue(Queue &Q)//创建队列{ if(InitQueue(Q)) {INPUT: cout<<"请输入队列元素的个数:"; int queuesize; cin>>queuesize; if(queuesize>MAXSIZE-1) { cout<<"超出最大容量,请重新输入。\n"; goto INPUT; } cout<<"请输入"<<queuesize<<"个元素:"; while(queuesize--) { ElemType elem; cin>>elem; EnQueue(Q,elem);//借用插入元素函数 } cout<<"创建的队列为:"; Output(Q); }} void Output(Queue Q)//输出队列元素{ if(!IsEmpty(Q)) { int cur=Q.first; while(cur!=Q.last) { cout<<Q.base[cur]<<" "; cur=(cur+1)%MAXSIZE;//注意细节 } cout<<endl; return; } cout<<"队列为空,无法输出。\n";} int QueueLength(Queue Q)//求队列的长度{ //分情况讨论: if(Q.last>=Q.first) { return Q.last-Q.first; } return Q.last+MAXSIZE-Q.first; //首先此时(Q.last<Q.first)下标0必定在两个下标之间; //Q.last:表示从下标0开始至队列结束的元素个数; //MAXSIZE-Q.first:表示队列开始至下标0之前的元素个数} Status IsEmpty(Queue Q)//判断队列是否为空{ if(Q.first==Q.last)//头尾指针相等时 { return OK; } return FALSE;} Status IsFull(Queue Q)//判断队列是否已满{ if((Q.last+1)%MAXSIZE==Q.first)//队列头指针在队列尾指针的下一位置(环状上) { return OK; } return FALSE;} void GetHead(Queue Q)//得到队列首元素{ if(!IsEmpty(Q)) { cout<<"队首元素是:"<<Q.base[Q.first]<<endl; return; } cout<<"队列为空。\n";} Status EnQueue(Queue &Q,ElemTypeelem)//插入元素{ if(!IsFull(Q))//队列未满时 { Q.base[Q.last]=elem; Q.last=(Q.last+1)%MAXSIZE; return OK; } cout<<"队列已满,无法插入元素。\n"; return FALSE;} void DeQueue(Queue &Q)//删除元素{ if(!IsEmpty(Q)) { Q.first=(Q.first+1)%MAXSIZE; cout<<"删除元素后的队列为:"; Output(Q); return; } cout<<"队列为空,无法删除元素。\n";} void ClearQueue(Queue &Q)//清空队列{ Q.first=Q.last; cout<<"队列清空成功。\n";} void Interaction(){ cout<<"请输入对应操作的序号:\n"; cout<<"0:退出程序;\n"; cout<<"1:建立队列;\n"; cout<<"2:输出队列;\n"; cout<<"3:求队列的长度;\n"; cout<<"4:判断队列是否为空;\n"; cout<<"5:得到队列的队首元素;\n"; cout<<"6:向队列中插入元素(插在队尾);\n"; cout<<"7:删除队列的元素(删除队首元素);\n"; cout<<"8:清空队列;\n"; cout<<"该队列最大容量为:"<<MAXSIZE-1<<"个元素。\n";}
0 0
- 顺式队列(循环队列)8种操作的实现
- 顺式队列的实现和链式队列的实现
- 循环队列的操作(循环队列)
- 循环队列操作实现
- 队列的数组实现(循环队列)
- 队列----循环队列的实现
- 循环队列操作之一:循环队列的表示和实现(C语言版本)
- 循环队列的操作
- 循环队列的操作
- 循环队列的实现和操作
- 循环队列的基本操作实现
- 实现循环队列的基本操作
- 数据结构-循环队列的基本实现操作
- 顺序队列(循环队列)基本操作实现 C语言
- 循环队列的实现
- 循环队列的实现
- 循环队列的实现
- 循环队列的实现
- 链式队列8种操作的实现
- 如何做笔记
- CSU - 1548 Design road
- BoIIS -- 免费IIS批量建站工具箱
- 在hiberate4.3.8final中one-to-one的xml中配置信息
- 顺式队列(循环队列)8种操作的实现
- VirtualBox 下安装ubuntu12.04图文教程
- C语言宏处理器用户指导
- leetcode 日经贴,Cpp code -Generate Parentheses
- hdu 1573 X问题(线性同余方程)
- POJ 2115-C Looooops(基础一元线性同余方程)
- Wet Tiles CSU Contest2073 - 湖南多校对抗赛(2015.04.06) I
- c compile error:fatal error C1083: 无法打开包括文件:“timeArrival.cpp”: No such file or directory
- 机器学习入门指南