码迷,mamicode.com
首页 > 其他好文 > 详细

(源代码见大话数据结构)线性表—循环队列的顺序存储结构

时间:2017-01-22 19:12:52      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:status   int   init   maxsize   als   one   length   class   ini   

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20
typedef int Status;
typedef int QElemType;
typedef struct
{
    QElemType data[MAXSIZE];
    int front;
    int rear;
}SqQueue;
Status InitQueue(SqQueue *Q);
Status QueueLength(SqQueue Q);
Status EnQueue(SqQueue *Q,QElemType e);
Status DeQueue(SqQueue *Q,QElemType *e);
Status QueueTraverse(SqQueue Q);
int main()
{
    SqQueue q;
    int n;
    InitQueue(&q);
    EnQueue(&q,666);
    QueueTraverse(q);
    printf("%d\n",DeQueue(&q,&n));
    printf("%d\n",n);
    return 0;
}
Status InitQueue(SqQueue *Q)
{
    Q->front=0;
    Q->rear=0;
    return OK;
}
Status QueueLength(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->data[Q->rear]=e;
    Q->rear=(Q->rear+1)%MAXSIZE;//忘了考虑rear==MAXSIZE-1;!!!!!!!!!!
    return OK;
}
Status DeQueue(SqQueue *Q,QElemType *e)
{
    if(Q->front==Q->rear)
        return ERROR;
    *e=Q->data[Q->front];
    Q->front=(Q->front+1)%MAXSIZE;
    return OK;
}
Status QueueTraverse(SqQueue Q)
{
    int h;
    h=Q.front;
    while(h!=Q.rear)
    {
        printf("%d ",Q.data[h]);
        h=(h+1)%MAXSIZE;
    }
    return OK;
}

实战BUG:

1.QueueTraverse(Q),没有定义h,把Q.front当变量了,结果导致,Q.front的下标改变了/(ㄒoㄒ)/~~

2.Q->rear改变时要考虑特殊情况如rear==MAXSIZE-1时。

(源代码见大话数据结构)线性表—循环队列的顺序存储结构

标签:status   int   init   maxsize   als   one   length   class   ini   

原文地址:http://www.cnblogs.com/LuRenJiang/p/6341070.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!