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

数据结构实验:顺序栈操作

Luz3年前 (2019-12-02)实验1928
  1. 实验题目:顺序栈操作
  2. 需求分析:

    本演示程序在TC2.0环境下编写调试,完成初始化顺序栈,插入元素,删除栈顶元素,取栈顶元素,遍历顺序栈,置空顺序栈等操作。

    输入的形式和输入值的范围。执行插入操作时,需要输入元素的值;执行删除操作时,需要删除栈顶元素;取栈顶元素时,需要输出栈顶元素;在所有输入中,元素的值都是整数。

    1. 插入操作中依次输入10,20,30,40,生成一个顺序栈
    2. 删除操作删除栈顶元素40
    3. 获取栈顶元素30
    4. 制空顺序栈
    5. 首先要根据键盘输入的数据初始化一个顺序栈;其次根据屏幕的菜单选择,可以进行数据的插入或删除操作,并在插入或删除数据后,顺序栈;最后在屏幕菜单中选择6,即可结束程序的运行。
    6. 程序所能达到的功能。完成顺序栈的初始化、插入、删除、获取、遍历、置空操作。
    7. 测试数据。
  3. 概要设计
    1. 主函数main()
    2. 初始化顺序栈函数 InitStack()
    3. 入栈函数Push()
    4. 出栈函数Pop()
    5. 获取栈顶元素函数GetTop()
    6. 遍历顺序栈函数Outstack()
    7. 置空顺序栈函数setEmpty()
    8. 为了实现上述程序功能,需要定义顺序栈的数据结构。
    9. 本程序包含7个函数
  4. 详细设计

    #include<stdio.h>

    #include<stdlib.h>

    #define MAXNUM 20

    #define elemtype int

    typedef struct{

        elemtype stack[MAXNUM];

        int top;

    }sqstack;

    void Initstack(sqstack *p){

        if(!p)

            printf("内存分配失败!");

        p->top =-1;

    }

    void Push (sqstack *p,elemtype x){

        if(p->top <MAXNUM-1){

            p->top =p->top +1;

            p->stack [p->top ]=x;

        }

        else

            printf("Overflow!\n");

    }

    elemtype Pop(sqstack *p){

        elemtype x;

        if(p->top >=0){

            x=p->stack [p->top ];

            printf("以前的栈顶数据元素%d已经被删除!\n",p->stack [p->top ]);

            p->top =p->top -1;

            return (x);

        }

        else {

            printf("Underflow!\n");

            return (0);

        }

    }

    elemtype Gettop(sqstack *p){

        elemtype x;

        if(p->top >=0){

            x=p->stack [p->top ];

            printf("\n栈顶元素为:%d\n",x);

            return (0);

        }

        else {

            printf("Underflow!\n");

            return (0);

        }

    }

    void Outstack (sqstack*p){

        int i;

        printf("\n");

        if(p->top<0)

            printf("这是一个空栈!");

        printf("\n");

        for(i=p->top;i>=0;i--)

            printf("%d个数据元素是:%6d\n",i,p->stack[i]);

    }

    void setempty(sqstack *p){

        p->top =-1;

    }

    int  main(){

        sqstack *q;

        int cord;

        elemtype a;

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

        do{

            printf("\n");

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

            printf("\n    1    初始化顺序栈      \n");

            printf("\n    2    插入一个元素      \n");

            printf("\n    3    删除栈顶元素      \n");

            printf("\n    4    取栈顶元素      \n");

            printf("\n    5    置空顺序栈      \n");

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

            printf("\n-----------------------------");

            printf("请输入你的选择(1,2,3,4,5,6)\n");

            scanf("%d",&cord);

            printf("\n");

            switch (cord) {

                case 1:{

                    q=(sqstack*)malloc(sizeof(sqstack));

                    Initstack(q);

                    Outstack(q);

                    break;

                }

                case 2:{

                    printf("请输入要插入的数据元素:a=");

                    scanf("%d",&a);

                    Push(q,a);

                    Outstack(q);

                    break;

                }

                case 3:{

                    Pop(q);

                    Outstack(q);

                    break;

                }

                case 4:{

                    Gettop(q);

                    Outstack(q);

                    break;

                }

                case 5:{

                    setempty(q);

                    printf("\n顺序栈被置空!\n");

                    Outstack(q);

                    break;

                }

                case 6:{

                    exit(0);

                    break;

                }

                

            }

        }while(cord<=6);

        return 0;

    }

  5. 调试分析

 

  1. 使用说明

    程序名为LinkList.exe,运行环境为DOS。程序执行后显示:

     

    1. 初始化顺序栈
    2. 插入一个元素
    3. 删除栈顶元素
    4. 取栈顶元素
    5. 置空顺序栈
    6. 结束程序运行

=================================

请输入你的选择(1,2,3,4,5,6)

 

在"请输入你的选择(1,2,3,4,5,6)"后输入数字选择执行不同的功能。要求首先输入足够多的插入元素,才可以进行其他的操作。每执行一次功能,就会显示执行的结果(正确或错误)以及执行后顺序栈的内容。

选择6:退出程序

选择1:显示"这是一个空栈"并初始化顺序栈。

选择2:显示"请输入要插入的数据元素:a=",要求输入元素的值。

选择3:显示"以前的栈顶数据元素已经被删除!\n:",执行成功后遍历顺序表,但被删除位置上没有元素时输出"Underflow!"

选择4:输出栈顶元素并遍历顺序表

选择5:置空顺序表并输出"顺序栈被置空!"

  1. 测试结果

    1、

2、

3、

4、

5、

发表评论

访客

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