基本接口实现代码,欢迎补充
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define IBFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType; /* 元素类型为int类型*/
//循环队列类型
typedef struct{
ElemType *elem; //存储空间的基址
int front; //对头位标
int rear; //队尾位标
int maxSize; //存储容量
}SqQueue;
//初始化空队列
Status InitQueue_Sq(SqQueue &Q, int size);
//销毁队列
Status DestroyQueue_Sq(SqQueue &Q);
//将Q置为空队列
void ClearQueue_Sq(SqQueue &Q);
//判断是否为空队列
Status QueueEmpty_Sq(SqQueue &Q);
//返回队列元素个数
int QueueLength_Sq(SqQueue &Q);
//若队列不空,则用e返回Q的队列头
Status GetHead_Sq(SqQueue Q,ElemType &e);
//在队尾插入元素
Status EnQueue_Sq(SqQueue &Q,ElemType e);
//删除队头元素
Status DeQueue_Sq(SqQueue &Q,ElemType &e);
//遍历打印队列
void TraverseQueue_Sq(SqQueue &Q);
//循环队列基本接口实现
//1.初始化空队列
Status InitQueue_Sq(SqQueue &Q, int size){
Q.elem = (ElemType*)malloc(size*sizeof(ElemType));
if(NULL==Q.elem) return OVERFLOW;
Q.maxSize=size;
Q.front=Q.rear=0;
return OK;
}
//2.销毁队列
Status DestroyQueue_Sq(SqQueue &Q){
free(Q.elem);
Q.elem=NULL;
Q.front=Q.rear=0;
return OK;
}
//3. 置为空队列
void ClearQueue_Sq(SqQueue &Q){
Q.front=Q.rear=0;
}
//4. 判断是否为空对列
Status QueueEmpty_Sq(SqQueue &Q){
if(Q.front==Q.rear){
return TRUE;
}else{
return FALSE;
}
}
//5.求队列元素个数
int QueueLength_Sq(SqQueue &Q){
if(Q.rear-Q.front<0) {
return Q.maxSize-Q.front+Q.rear;
}else{
return Q.rear-Q.front;
}
}
//6.返回队头元素,并返回OK
Status GetHead_Sq(SqQueue Q,ElemType &e){
if(Q.maxSize<=0) return ERROR;
e=Q.elem[Q.front];
return OK;
}
//7.在队尾位置插入元素
Status EnQueue_Sq(SqQueue &Q,ElemType e){
if((Q.rear+1)%Q.maxSize==Q.front) return ERROR;
Q.elem[Q.rear]=e;
Q.rear=(Q.rear+1)%Q.maxSize;
return OK;
}
//8.出队
Status DeQueue_Sq(SqQueue &Q,ElemType &e){
if(Q.front==Q.rear) return ERROR;
e=Q.elem[Q.front];
Q.front=(Q.front+1)%Q.maxSize;
return OK;
}
//9.遍历并打印元素
void TraverseQueue_Sq(SqQueue &Q)
{
int i=Q.front;
printf("队中的元素是:");
while(i%Q.maxSize!=Q.rear)
{
printf("%4d ",Q.elem[i]);
i++;
}
printf("\n");
}
//测试函数
int main(){
int i,e,n=10,a,j;
SqQueue Q;
do{
printf("1.初始化循环队列\n");
printf("2.销毁循环队列\n");
printf("3.将循环队列置为空队列\n");
printf("4.判断循环队列是否为空\n");
printf("5.循环队列的长度\n");
printf("6.返回循环队列的队头元素\n");
printf("7.在队尾插入元素\n");
printf("8.删除队头元素\n");
printf("9.遍历并打印队列元素\n");
printf("请输入你要进行的操作:\n");
scanf("%d",&i);
switch(i){
case 1:
if(InitQueue_Sq(Q,n)){
printf("初始化成功\n");
printf("请输入5个元素:\n");
for(j=0;j<5;j++){
scanf("%d",&a);
EnQueue_Sq(Q,a);
}
};
break;
case 2:
DestroyQueue_Sq(Q);
printf("销毁队列成功\n");
break;
case 3:
ClearQueue_Sq(Q);
printf("置空成功\n");
break;
case 4:
if(QueueEmpty_Sq(Q)){
printf("循环队列为空!\n");
}else{
printf("循环队列不为空!\n");
}
break;
case 5:
printf("循环队列的长度为:%d\n",QueueLength_Sq(Q));
break;
case 6:
GetHead_Sq(Q,e);
printf("循环队列队头元素为:%d\n",e);
break;
case 7:
printf("请输入你要插入的元素:");
scanf("%d",&e);
if(EnQueue_Sq(Q,e)){
printf("插入成功\n");
}
break;
case 8:
DeQueue_Sq(Q,e);
printf("删除成功\n");
break;
case 9:
TraverseQueue_Sq(Q);
break;
}
}while(i>0&&i<10);
return 0;
}
觉得有用将点赞哦!