-->
当前位置:首页 > 实验 > 正文内容

数据结构实验:循环顺序队列操作

Luz4年前 (2019-12-02)实验3748
  1. 实验题目:循环顺序队列操作
  2. 需求分析:

    本演示程序在TC2.0环境下编写调试,完成队列初始化,入队,出队,判断队列是否为空,取队头元素,遍历队列等操作。

    首先要根据键盘输入的数据建立一个循环顺序队列,其次根据屏幕的菜单选择,可以进行数据的入队或出队操作,并在入队或出队后,再输出队列;最后在屏幕菜单中选择0,即可结束程序的运行。

    1. 初始化队列
    2. 建立顺序队列依次输入5 1,2,3,4,5  ,建立5个元素的循环顺序队列
    3. 入队操作中输入20 将20入队
    4. 出队操作 将队头元素1出队
    5. 取队头元素,此时队头元素为2
    6. 遍历队列 输出队列的队首元素 队尾元素位置 队列长度 队列数据
    7. 程序所能达到的功能。完成循环顺序队列的生成、入队、出队、遍历、取队头元素、判断队列是否为空的操作。
    8. 测试数据。
  3. 概要设计
    1. 主函数main()
    2. 初始化循环顺序队列initQueue()
    3. 建立循环顺序队列函数 Setsqqueue()
    4. 入队函数  append()
    5. 出队函数Delete()
    6. 遍历队列函数Display()
    7. 取队头元素函数gethead()
    8. 为了实现上述程序功能,需要定义循环顺序队列的数据结构。
    9. 本程序包含7个函数
  4. 详细设计

    #include<stdio.h>

    #include<stdlib.h>

    #include<malloc.h>

    #define MAXNUM 10

    #define Elemtype int

    #define TRUE 1

    #define FALSE 0

    typedef struct{

        Elemtype queue[MAXNUM];

        int front;

        int rear;

    }sqqueue;

    int initQueue(sqqueue *q)

    {

        if(!q) return FALSE;

        q->front=0;

        q->rear=0;

        return TRUE;

    }

    int append(sqqueue *q,Elemtype x){

        if((q->rear+1)%MAXNUM==q->front){

            printf("\n队列满!");

            return FALSE;

            }

        q->queue[q->rear]=x;

        q->rear=(q->rear+1)%MAXNUM;

        return TRUE;

    }

    int Delete(sqqueue * q) {

    Elemtype x;

    if(q->front==q->rear)

    { printf("队列空!\n");

    return 0;

    }

    x=q->queue[q->front];

    q->front=(q->front+1)%MAXNUM;

    printf("\n队头元素%d出队!\n",x);

    return TRUE;

    }

    int Empty(sqqueue * q) {

        if(q->front==q->rear) {

        return TRUE;

        }

        return FALSE;

    }

    int gethead(sqqueue * q) {

    Elemtype x;

    if(q->front==q->rear) {

    printf("队列空!\n");return 0; }

    x=(q->queue[q->front+1]);

    printf("队头元素为:%d\n",x);

    return x;

    }

    void display(sqqueue * q) {

    int s;

    s=q->front;

    if(q->front==q->rear)

    printf("队列空!\n");

    else {

    printf("\n顺序队列依次为:");

    while(s!=q->rear) {

        printf("%d<-",q->queue[s]);

        s=(s+1)%MAXNUM;

    }

    printf("\n");

    printf("顺序队列的队尾元素所在位置:rear= %d\n",q->rear);

    printf("顺序队列的队头元素所在位置:front= %d\n",q->front);

    printf("顺序队列的长度为:%d\n",(q->rear-q->front+MAXNUM)%MAXNUM);

    }

    }

    void Setsqqueue(sqqueue *q) {

    int n,i,m;

    printf("\n请输入顺序队列的长度:");

    scanf("%d",&n);

    printf("\n请依次输入入顺序队列的元素值:\n");

    for(i=0;i<n;i++){

        scanf("%d",&m);

        append(q,m);

    }

    }

    int main() {

        sqqueue *head;

        int x,select;

        head=(sqqueue*)malloc(sizeof(sqqueue));

        printf("\n第一次使用请初始化!\n");

        do {

            printf("============主菜单============\n");

            printf("1 初始化\n");

            printf("2 建立顺序队列\n");

            printf("3 入队\n");

            printf("4 出队\n");

            printf("5 判断队列是否为空\n");

            printf("6 取队头元素\n");

            printf("7 遍历队列\n");

            printf("0 结束程序运行\n");

            printf("===============================\n");

            printf("\n请选择操作(1--7):\n");

            scanf("%d",&select);

            switch(select) {

            case 1: {

                    initQueue(head);

                    printf("已经初始化顺序队列!\n"); break; }

            case 2: {

                    Setsqqueue(head);

            printf("\n已经建立队列!\n"); display(head); break; }

            case 3: {

                    printf("请输入队的值:\n"); scanf("%d",&x);

                    append(head,x);

                    display(head); break; }

            case 4: {

                    Delete(head);

                    display(head);

                    break; }

            case 5: {

                    if(Empty(head))

                        printf("队列空\n");

                    else

                        printf("队列非空\n");

                        break; }

            case 6: {

                    gethead(head);

                    break; }

            case 7: {

                    display(head);

                    break; }

            case 0: exit(0);

            }

     

            }while(select<=7);

            return 0;

    }

     

     

     

     

     

  5. 调试分析

编译未发现错误

 

  1. 使用说明

    程序名为未命名1.exe,运行环境为MS-DOS。程序执行后显示:

     

 

在"请输入你的选择(1,2,3,4,5,6,7,0)"后输入数字选择执行不同的功能。要求首先输入1初始化,才可以进行其他的操作。每执行一次功能,就会显示执行的结果(正确或错误)以及执行后队列的内容。

选择0:退出程序

选择1:显示"已初始化顺序队列!"

选择2:显示"请输入顺序队列的长度:","请依次输入入顺序队列的元素值:"要求分别输入要插入的元素的个数和元素的值。

选择3:显示"请输入队的值:",要求输入入队元素的值

选择4:显示"元素XX出队!",XX为队头元素

选择5:当队列不为空时显示"队列非空"

选择6:输出当前队头元素的值

选择7:输出整个队列的内容

  1. 测试结果

    初始化

    建立顺序队列

     

    入队

     

    出队

     

    判断队列是否为空

     

     

    取队头元素

     

     

    遍历队列

     

 

 

 

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。