目录
一、main
#include <iostream>
#include "com.h"
using namespace std ;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv) {
SqQueue Q ;
int i , number , choice , n;
QElemType e ;
do
{
printf("\t\t\t==================================================\n");
printf("\t\t\t| |\n");
printf("\t\t\t| 循环队列基本操作 |\n");
printf("\t\t\t| |\n");
printf("\t\t\t|================================================|\n");
printf("\t\t\t| 请选择要操作的命令 |\n");
printf("\t\t\t|------------------------------------------------|\n");
printf("\t\t\t| |\n");
printf("\t\t\t| 0.退出整个系统 1.初始化队列 |\n");
printf("\t\t\t| 2.初始输入元素 3.队列是否为空 |\n");
printf("\t\t\t| 4.查看队列的长度 5.取队头元素 |\n");
printf("\t\t\t| 6.入队 7.出队 |\n");
printf("\t\t\t| 8.遍历队列 9.清空队列 |\n");
printf("\t\t\t| 10.销毁队列 |\n");
printf("\t\t\t| |\n");
printf("\t\t\t==================================================\n");
printf("选择(0---13):\t");
cin >> choice ;
switch(choice)
{
case 0 : //0.退出整个系统
cout << "退出成功" ;
exit(0) ;
case 1 :// 1.初始化栈队列
InitQueue(Q) ;
cout << "初始化成功" ;
cout << endl ;
break ;
case 2 : //2.初始输入元素
cout << "请输入需要入队列的数据个数:" ;
cin >> n ;
cout << "请输入需要入队列的"<<n<<"个数据,用空格隔开:"<<endl ;
for(i = 1 ; i <= n ; i ++)
{
cin >> e ;
EnQueue(Q , e) ;
}
cout << endl ;
cout << "队中元素为:" ;
if(QueueTraverse(Q) == ERROR) cout << "空队列" ;
cout << endl ;
break ;
case 3 : // 3.队列是否为空
cout << "队中元素为:" ;
if(QueueTraverse(Q) == ERROR) cout << "空队列" ;
cout << endl ;
if(QueueEmpty(Q)) cout << "该队列为空" ;
else cout << "该队列不为空" ;
cout << endl ;
break ;
case 4 : // 4.查看队列的长度
cout << "队中元素为:" ;
if(QueueTraverse(Q) == ERROR) cout << "空队列" ;
cout << endl ;
cout << "栈的长度为:" << QueueLength(Q) ;
cout << endl ;
break ;
case 5 : //5.取队头元素
cout << "队中元素为:" ;
if(QueueTraverse(Q) == ERROR) cout << "空队列" ;
cout << endl ;
cout << "队头元素为 " << GetHead(Q) ;
cout << endl ;
break ;
case 6 : // 6.入队
cout << "请输入入队元素:" ;
cin >> e ;
if(EnQueue(Q , e) == OK) cout << "入队成功" ;
else cout << "队满,入队失败" ;
cout << endl ;
cout << "现队列为:" ;
if(QueueTraverse(Q) == ERROR) cout << "空队列" ;
cout << endl ;
break ;
case 7 : // 7. 出队
if(DeQueue(Q , e) == ERROR) cout << "该队列为空,操作失败" ;
else cout << "队头元素 " << e << " 已出队" ;
cout << endl ;
cout << "现队列为:" ;
if(QueueTraverse(Q) == ERROR) cout << "空队列" ;
cout << endl ;
break ;
case 8 : //8.遍历队列
cout << "队中元素为:" ;
if(QueueTraverse(Q) == ERROR) cout << "空队列" ;
cout << endl ;
break ;
case 9 : // 9.清空队列
if(ClearQueue(Q) == OK) cout << "该队列已被清空" ;
cout << endl ;
cout << "清空后:" ;
if(QueueEmpty(Q)) cout << "该队列为空" ;
else cout << "该队列不为空" ;
cout << endl ;
break ;
case 10 : // 10.销毁队列
if(DestoryQueue(Q) == OK) cout << "该队列已被销毁" ;
cout << endl ;
break ;
default :
cout << "输入不合法,请重新输入" ;
cout << endl ;
}
}while(choice != 0) ;
return 0;
}
二、function
#include <iostream>
#include "com.h"
using namespace std ;
// 初始化
Status InitQueue(SqQueue &Q)
{
Q.base = new QElemType[MAXQSIZE] ;
if(!Q.base) return OVERFLOW ;
Q.front = Q.rear = 0 ; // 开始为空 0
return OK ;
}
// 求队长
int QueueLength(SqQueue Q)
{
return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE ;
}
// 入队
Status EnQueue(SqQueue &Q , QElemType e)
{
if((Q.rear+1)%MAXQSIZE == Q.front) return ERROR ; // 已满
Q.base[Q.rear] = e ;
Q.rear = (Q.rear+1) % MAXQSIZE ;
return OK ;
}
// 出队
Status DeQueue(SqQueue &Q , QElemType &e)
{
if(Q.front == Q.rear) return ERROR ; // 空队列
e = Q.base[Q.front] ; // 传回到主函数
Q.front = (Q.front+1) % MAXQSIZE ;
return OK ;
}
// 取队头元素
QElemType GetHead(SqQueue Q)
{
if(Q.front != Q.rear)
return Q.base[Q.front] ;
}
// 判空
bool QueueEmpty(SqQueue Q)
{
if(Q.front == Q.rear) return true ;
else return false ;
}
// 遍历
Status QueueTraverse(SqQueue Q)
{
if(Q.front == Q.rear) return ERROR ;
int i = Q.front;
while((i+MAXQSIZE)%MAXQSIZE != Q.rear)
{
cout << Q.base[i] << " " ;
i ++ ;
}
return OK ;
}
// 清空
Status ClearQueue(SqQueue &Q)
{
Q.front = Q.rear = 0 ;
return OK ;
}
// 销毁
Status DestoryQueue(SqQueue &Q)
{
if(Q.base) delete Q.base ;
Q.front = Q.rear = 0 ;
return OK ;
}
三、com
#define OK 0
#define ERROR -1
#define OVERFLOW -2
typedef int QElemType ;
typedef int Status ;
#define MAXQSIZE 5
typedef struct QNode{
QElemType *base ;
int front ;
int rear ;
}SqQueue;
extern Status InitQueue(SqQueue &Q);
extern int QueueLength(SqQueue Q);
extern Status EnQueue(SqQueue &Q , QElemType e);
extern Status DeQueue(SqQueue &Q , QElemType &e);
extern QElemType GetHead(SqQueue Q) ;
extern bool QueueEmpty(SqQueue Q) ;
extern Status QueueTraverse(SqQueue Q) ;
extern Status ClearQueue(SqQueue &Q) ;
extern Status DestoryQueue(SqQueue &Q) ;