关闭

数据结构-循环队列

标签: 数据结构循环队列
86人阅读 评论(0) 收藏 举报
分类:
//克服假溢出现象
#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;
}
 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6068次
    • 积分:377
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:2篇
    • 译文:0篇
    • 评论:4条
    文章分类