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

队列的相关操作

2014-08-16 11:25 267 查看

队列的相关操作

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXN 100
#define OK 1
#define ERROR 0

typedef int BOOL;
typedef int Status;
typedef int DataType;
typedef struct SeQueue
{
DataType data[MAXN];
int front;
int rear;
}SeQueue;

Status InitQueue(SeQueue *q)
{
q->front=0;
q->rear=0;
return OK;
}

Status ClearQueue(SeQueue *q)
{
memset(q->data,0,sizeof(q->data));
q->front=q->rear=0;
return OK;
}

BOOL QueueEmpty(SeQueue q)
{
if(q.front==q.rear)
return 1;
else
return 0;
}

Status GetHead(SeQueue q,DataType *e)
{
if(q.front==q.rear)
return ERROR;
(*e)=q.data[q.front];
return OK;
}

Status EnQueue(SeQueue *q,DataType e)
{
if((q->rear+1)==q->front)
return ERROR;
q->data[q->rear]=e;
q->rear=(q->rear+1)%MAXN;
return OK;
}

Status DeQueue(SeQueue *q,DataType *e)
{
if(q->front==q->rear)
return ERROR;
(*e)=q->data[q->front];
q->front=(q->front+1)%MAXN;
return OK;
}

int QueueLength(SeQueue q)
{
return (q.rear-q.front+MAXN)%MAXN;
}

Status Display(SeQueue q)
{
int i=q.front;
if(q.front==q.rear)
return ERROR;
while(i!=q.rear)
{
printf("%3d",q.data[i]);
i=(i+1)%MAXN;
}
printf("\n");
return OK;
}

void menu()
{
printf("---------------------------------------\n");
printf("              Menu         Version 1.0 \n");
printf("---------------------------------------\n");
printf("     1.InitQueue         2.ClearQueue  \n");
printf("     3.QueueEmpty        4.GetHead     \n");
printf("     5.EnQueue           6.DeQueue     \n");
printf("     7.QueueLength       8.Display     \n");
printf("     9.Quit                            \n");
printf("---------------------------------------\n");
printf("Please input your choice:");
}

int main(int argc,char *argv[])
{
int choice;
DataType e;
SeQueue q;
while(1)
{
menu();
scanf("%d",&choice);
switch (choice)
{
case 1:
if(InitQueue(&q))
printf("Init success!\n");
else
printf("Init failure!\n");
break;
case 2:
if(ClearQueue(&q))
printf("Clear success!\n");
else
printf("Clear failure!\n");
break;
case 3:
if(QueueEmpty(q))
printf("The queue is empty!\n");
else
printf("The queue is not empty!\n");
break;
case 4:
if(GetHead(q,&e))
printf("The head of the queue is: %d\n",e);
else
printf("Illegal operation!\n");
break;
case 5:
printf("Please input the element you want to Enqueue:");
scanf("%d",&e);
if(EnQueue(&q,e))
printf("Enqueue success!\n");
else
printf("Enqueue failure!\n");
break;
case 6:
if(DeQueue(&q,&e))
printf("%d is out of the queue!\n",e);
else
printf("Illegal operation!\n");
break;
case 7:
printf("The length of the queue is: %d\n",QueueLength(q));
break;
case 8:
Display(q);
break;
case 9:
printf("Quit...\n");
exit(0);
break;
default:
printf("Illegal input!\n");
break;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 队列