zoukankan      html  css  js  c++  java
  • 数据结构实验三——顺序栈

    #include <stdio.h>
    #include <stdlib.h>
    #define M 10
    #define N 5
    int flag=0;
    typedef struct SeqStack
    {
        char *top;
        char *base;
        int stacksize;
    }SeqStack;
    void InitStack(SeqStack *S)
    {
        S->base=(char *)malloc(M*sizeof(char));
        S->top=S->base;
        S->stacksize=M;
    }
    void CreateStack(SeqStack *S)
    {
        if(flag==1)
            printf("顺序栈已经创建!
    ");
        else
        {
            int i,length;
            char ch;
            printf("请输入要创建顺序栈的长度:
    ");
            scanf("%d",&length);
            for(i=0;i<length;i++)
            {
                printf("请输入顺序栈的元素:
    ");
                scanf("%c",&ch);
                if((ch=getchar())!='
    ')
                *S->top++=ch;
            }
            flag=1;
            printf("顺序栈创建完成!
    ");
        }
    }
    void PushStack(SeqStack *S)
    {
        if(flag==0)
            printf("顺序栈未创建,无法进行入栈操作!
    ");
        else
        {
            char e;
            printf("请输入入栈的元素!
    ");
            e=getchar();
            scanf("%c",&e);
            if(S->stacksize<=S->top-S->base)
            {
                S->base=(char *)realloc(S->base,(S->stacksize+N)*sizeof(char));
                S->top=S->base+S->stacksize;
                S->stacksize+=N;
            }
            *S->top++=e;
            printf("入栈操作成功!
    ");
        }
    }
    void PopStack(SeqStack *S)
    {
        if(flag==0)
            printf("顺序栈未创建,无法进行出栈操作!
    ");
        else
        {
            if(S->base==S->top)
                printf("顺序栈为空,无法进行出栈操作!
    ");
            else
            {
                char ch;
                ch=*--S->top;
                printf("顺序栈出栈成功,出栈元素为%c
    ",ch);
            }
        }
    }
    void StackLength(SeqStack S)
    {
        int len;
        if(flag==0)
            printf("顺序栈未创建,无法计算栈长度!
    ");
        else
        {
            len=S.top-S.base;
            printf("顺序栈的长度为:%d
    ",len);
        }
    }
    int StackEmpty(SeqStack S)
    {
        if(flag==0)
            printf("顺序栈未创建,无法判断是否为空!
    ");
        else
        {
            if(S.base==S.top)
            {
                printf("顺序栈为空!
    ");
                return 1;
            }
            else
                printf("顺序栈不为空!
    ");
        }
        return 0;
    }
    void DisplayStack(SeqStack S)
    {
        if(flag==0)
            printf("顺序栈未创建,无法显示!
    ");
        else
        {
            char *r,*p=--S.top;
            char *q=S.base;
            printf("顺序栈的显示顺序为:
    ");
            for(r=p;r>=q;r--)
                printf("%c ",*r);
            printf("
    ");
        }
    }
    void DestoryStack(SeqStack *S)
    {
        if(flag==0)
            printf("顺序栈未创建,不需要销毁!
    ");
        else
        {
            free(S->base);
            flag=0;
            printf("顺序栈已成功被销毁!
    ");
        }
    }
    void menu()
    {
        printf("	顺序栈基本实验操作
    ");
        printf("*********************************
    ");
        printf("1 建立顺序栈!			*
    ");
        printf("2 顺序栈入栈操作!		*
    ");
        printf("3 顺序栈出栈操作!		*
    ");
        printf("4 求顺序栈长度!		*
    ");
        printf("5 判断顺序栈是否为空!		*
    ");
        printf("6 显示顺序栈!			*
    ");
        printf("7 销毁顺序栈!			*
    ");
        printf("0 退出程序!			*
    ");
        printf("*********************************
    ");
    }
    int main()
    {
        int select;
        SeqStack ptr;
        InitStack(&ptr);
        while(1)
        {
            menu();
            printf("请输入选择命令:
    ");
            scanf("%d",&select);
            switch(select)
            {
            case 1:
                CreateStack(&ptr);
                break;
            case 2:
                PushStack(&ptr);
                break;
            case 3:
                PopStack(&ptr);
                break;
            case 4:
                StackLength(ptr);
                break;
            case 5:
                StackEmpty(ptr);
                break;
            case 6:
                DisplayStack(ptr);
                break;
            case 7:
                DestoryStack(&ptr);
                break;
            case 0:
                exit(1);
                break;
            default :
                printf("命令输入有误,请重新输入!
    ");
                break;
            }
        }
        return 0;
    }
    
    这个我自己测试了一下。感觉没什么问题。其实也不知道到底有没有问题!发现问题,希望大家能指出!
  • 相关阅读:
    修改MySQL表中自增编号
    springboot整合mybatis统一配置bean的别名
    kotlin来了!!
    微信小程序获取登录手机号
    maven--package
    修改oracle数据库时间
    oracle启动停止命令
    安装 MySQL 之后初始密码在哪里??
    EntityFramework~~~三种模式
    webqq协议分析之~~~~验证是否需要验证码
  • 原文地址:https://www.cnblogs.com/abc-24990/p/4257531.html
Copyright © 2011-2022 走看看