二 数据结构栈和队列基本定义

    技术2022-05-19  22

    1 栈的抽象数据类型

    ADT Stack

    {

       数据对象:D = {a[i]|}

       数据关系:R1 = {<a[i-1],a[i]>}

          约定a[n]端为栈顶,a[1]端为栈底。

       基本操作:

    }ADT Stack;

    1.1 顺序栈

    typedef int SElemType;

    #define STACK_INIT_SIZE 100;

    #define STACKINCREMENT 10;

    typedef struct

    {

        SElemType *base;

        SElemType *top;

        int stacksize;

    }SqStack;

    1.2 链栈

    typedef struct SNode

    {

        SElemType data;

        struct SNode *next;

    }SNode,*LinkStack;

    2 队列的抽象数据类型

    ADT Queue

    {

       数据对象:D = {a[i]|}

       数据关系:R1 = {<a[i-1],a[i]>}

                约定a[1]为队头,a[n]为队尾

       基本操作

    }ADT Queue

    2.1 链队列

    结点定义

    typedef struct QNode

    {

         QElemType data;

         struct QNode *next;

    }QNode,*QueuePtr;

    链队列类型

    typedef struct

    {

         QueuePtr front;

         QueuePtr rear;

    }LinkQueue;

    2.2 顺序队列

    typedef int QElemType;

    #define MAXQSIZE 100;

    typedef struct

    {

         QElemType *base;

         int front;

         int rear;

    }SqQueue;

    2.3 循环队列

    把队列设成环形,首尾相接,解决了假溢出的问题

    设置一个标志区分空满队列,少用一个元素空间

    此时

    队空条件:Q.front == Q.rear

    队满条件:(Q.rear+1)%MAXSIZE == Q.front

    初始化时

    Status InitQueue(SqQueue &Q)

    {

         Q.base = (QElemType*)malloc(MAXQSIZE*sizeof(QElemType));

         if(!Q.base)

             exit OVERFLOW;

         Q.front = Q.rear = 0;

         return OK;

    }


    最新回复(0)