您的位置:首页 > 理论基础 > 数据结构算法

数据结构--循环队列(简易)--C

2017-11-12 16:10 393 查看
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
/*循环队列*/
#define OK 1
#define ERROR 0
#define OVERFLOW -2

#define MAXSIZE 10

typedef int Status;
typedef int QElemType;

typedef struct{
QElemType *base;
int front;
int rear;
}SqQueue;

Status InitQueue(SqQueue *q){
q->base=(QElemType *)malloc(sizeof(QElemType)*MAXSIZE);
if(!q->base) exit(OVERFLOW);
q->front=q->rear=0;
return OK;
}
Status DestoryQueue(SqQueue *q){
free(q->base);
q->base=NULL;
return OK;
}
int QueueLenth(SqQueue *q){
return(q->rear-q->front+MAXSIZE)%MAXSIZE;
}

Status EnQueue(SqQueue *q,QElemType e){
if((q->rear+1)%MAXSIZE==q->front) return ERROR;
*(q->base+q->rear)=e;
q->rear=(q->rear+1)%MAXSIZE;
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)%MAXSIZE;
return OK;
}

void QueueTraverse(SqQueue *q){
int i=q->front;
printf("QueueTraverse:");
while(i%MAXSIZE!=q->rear){
printf(" %d ",*(q->base+i));
i++;
}
printf("\n");
}

int main(){
SqQueue q;
int element;
static int a=1;
char c;
printf("--InitQueue success!\n");
InitQueue(&q);
while(a){
printf("**please input 1-5:\n**1.EnQueue 2.DeQueue 3.QueueTraverse 4.QueueLenth 5.back**\n");
scanf("%d",&a);
switch(a){
case 1:
printf("EnQueue:input queue element:\n");
scanf("%d",&element);
EnQueue(&q,element);
break;
case 2:
DeQueue(&q,&element);
printf("DeQueue Success---DeQueue Element:%d\n",element);
break;
case 3:
QueueTraverse(&q);
break;
case 4:
printf("QueueLength:%d\n",QueueLenth(&q));
break;
case 5:
a=0;
break;
default:
printf("input error");
break;
}
}
DestoryQueue(&q);
printf("--destroy success\n");
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: