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

数据结构-循环队列

2017-01-02 22:13 281 查看
//克服假溢出现象
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 100
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define TRUE 1
#define FALSE 0
#define true 1
#define false 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define OPSETSIZE 7
#define MAXQSIZE 100
typedef int Status;
typedef int ElemType;
typedef int QElemType;
typedef struct
{
QElemType  *base;
int  front, rear;
} SqQueue;

Status InitQueue(SqQueue *Q);
Status EnQueue(SqQueue *Q, ElemType e);
Status DeQueue (SqQueue *Q, ElemType *e);
int QueueLength(SqQueue Q);

int main()
{
SqQueue Q;
InitQueue(&Q);
EnQueue(&Q, 1);
EnQueue(&Q, 2);
EnQueue(&Q, 3);
EnQueue(&Q, 4);
EnQueue(&Q, 5);
printf("Then the length of Queue is %d\n", QueueLength(Q));
while(QueueLength(Q))
{
ElemType E;
DeQueue(&Q, &E);
printf("DeQueue , The Elem is %d\n", E);
}
return 0;
}

Status InitQueue(SqQueue *Q)
{
Q->base = (ElemType *) malloc(MAXQSIZE *sizeof (ElemType));
if (!Q->base)
exit (OVERFLOW);
Q->front = Q->rear = 0;
return OK;
}

Status EnQueue(SqQueue *Q, ElemType 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, ElemType *e)
{
if (Q->front == Q->rear)
return ERROR;
*e = Q->base[Q->front];
Q->front = (Q->front + 1) % MAXQSIZE;
return OK;
}
int QueueLength(SqQueue Q)
{
return (Q.rear - Q.front+MAXQSIZE) % MAXQSIZE;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: