数据结构-顺序队列

目录

一、main

二、function

三、com


一、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) ;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值