数据结构考研复习(循环队列)

这部分内容关于队列的顺序存储,关键点在于对于队空及队满这两种情况的处理,主要有以下三种方式:

  1. 牺牲一个存储数据单元用以区分
  2. 类型中增设表示元素个数的数据成员
  3. 类型中增设tag数据成员用以区分

下文采用了第一种形式。

#include<stdio.h>

#define MaxSize 50

typedef struct{
    int data[MaxSize];
    int front,rear;//队首和队尾指针
}SqQueue;

/* -1-初始化循环队列*/
void InitQueue(SqQueue &Q){
    Q.rear = Q.front = 0;//初始化队首、队尾指针
}

/* -2- 判断是否队空*/
bool isEmpty(SqQueue Q){
    if(Q.rear == Q.front)
    {
        return true;
    }
    else
    {
        return false;
    }
}

/* -3- 入队(插入元素)*/
bool EnQueue(SqQueue &Q,int e){
    if((Q.rear+1) % MaxSize == Q.front)
    {
        printf("队满!\n");
        return false;
    }
    Q.data[Q.rear] = e;
    Q.rear = (Q.rear + 1) % MaxSize; //队尾指针加一取模
    return true;
}

/* -4- 出队*/
bool DeQueue(SqQueue &Q,int &e){
    if(isEmpty(Q)){
       return false;
    }
    else{
        e = Q.data[Q.front];
        Q.front = (Q.front + 1) % MaxSize;
    }
    return true;
}


int main(){
    SqQueue Q;
    InitQueue(Q);

    printf("*请输入队列长度:\n");
    int e,length,temp,i=1;
    scanf("%d",&length);
    temp = length;
    printf("\n*请依次输入%d个元素\n",length);
    while(length > 0){
        printf("请输入第%d个元素:\n",i);
        scanf("%d",&e);
        EnQueue(Q,e);
        length--;
        i++;
    }
    printf("\n*请进行选择:\n");
    printf("==============\n\n");
    printf("==1.循环出队\n");
    printf("==2.当前队首、队尾元素\n");
    int flag;
    scanf("%d",&flag);
    switch(flag){
    case(1):
        {
            printf("\n当前队列为:\n");
           while(temp > 0){
                int e;
                if(temp != 1)
                {
                     printf("%d->",Q.data[Q.front]);
                }
                else
                {
                    printf("%d",Q.data[Q.front]);
                }

                DeQueue(Q,e);
                temp--;
           }
           break;
        }
    case(2):
        {
            printf("循环队列队尾不存放数据,因此当前队尾前一个位置的元素为:%d\n",Q.data[Q.rear-1]);
            printf("当前队首元素为:%d\n",Q.data[Q.front]);
        }
    }
    return 0;
}

最终结果:

 

 

 

 

posted on 2021-08-03 11:24  HOr7z  阅读(74)  评论(0编辑  收藏  举报