數(shù)據(jù)結(jié)構(gòu)
#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define MAXQSIZE 100
typedef struct
{?
int *elem;
int front;
int rear;
}SqQueue;
int InitQueue(SqQueue *Q)//隊(duì)列初始化
{
Q->elem=(int*)malloc(MAXQSIZE*sizeof(int));
if(!Q->elem)return(OVERFLOW);
Q->rear=Q->front=0;
return OK;}
int EnQueue(SqQueue *Q,int e)//入隊(duì)操作
{if((Q->rear+1)%MAXQSIZE==Q->front)return ERROR;
Q->elem[Q->rear]=e;
Q->rear=(Q->rear+1)%MAXQSIZE;
return OK;
}
int DeQueue(SqQueue *Q,int *e)//出隊(duì)操作
{
if(Q->front==Q->rear)return ERROR;
*e=Q->elem[Q->front];
Q->front=(Q->front+1)%MAXQSIZE;
return OK;
}
int QueueLength(SqQueue Q)//實(shí)現(xiàn)計(jì)算隊(duì)列中元素的操作
{
return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}
void Display(SqQueue Q)//實(shí)現(xiàn)顯示隊(duì)列中元素的操作
{
int i;
if(Q.rear>Q.front)
{for (i=Q.front;i<Q.rear;i++)
printf("\t%d",Q.elem[i]);
};
if(Q.rear<Q.front)
{for(i=Q.front;i<MAXQSIZE;i++)
printf("\t%d",Q.elem[i]);
};
printf("\n");
}
void main()
{ int e;
SqQueue Q;
InitQueue(&Q);
printf("創(chuàng)建隊(duì)列,請輸入隊(duì)列元素(以0結(jié)束);\n");
scanf("%d",&e);
while(e!=0)
{
EnQueue(&Q,e);
scanf("%d",&e);
}
printf("\n");
printf("目前隊(duì)列中的元素:\n");
Display(Q);
printf("\n");
printf("請輸入要入列的元素:");
scanf("%d",&e);
EnQueue(&Q,e);
printf("\n");
printf("執(zhí)行入列操作后,隊(duì)列中的元素為:\n");
Display(Q);
DeQueue(&Q,&e);
printf("\n");
printf("隊(duì)頭出隊(duì),刪除的元素:\n");
printf("%d\n",e);
printf("\n");
printf("執(zhí)行出隊(duì)操作后,隊(duì)列中的元素:\n");
Display(Q);
printf("\n");
printf("隊(duì)列的長度");
printf("\t%d\n",QueueLength(Q));
return;
}