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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(源代码见大话数据结构)线性表—循环队列的顺序存储结构相关的知识,希望对你有一定的参考价值。

#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时。

以上是关于(源代码见大话数据结构)线性表—循环队列的顺序存储结构的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法合集

大话数据结构----循环队列和链式队列

[读书笔记]-大话数据结构-3-线性表-线性表的顺序存储

队列的定义循环队列的顺序存储结构及链式存储结构

数据结构之线性表代码实现顺序存储,链式存储,静态链表(选自大话数据结构)

《大话数据结构》笔记--线性表的顺序存储结构