编写C程序,实现顺序栈的下列功能: 

1 设计一个虚拟界面,让用户选择操作(根据提示输入数据)

2 采用模块化编程思想,编写main函数和若干子函数(实现功能)

3 栈的基本功能有:创建栈、判断是否为空,是否为满,入栈,出栈,取出栈顶元素。

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int status;
typedef struct {
    int* base;
    int* top;
    int stacksize;
}SqStack;
status InitStack(SqStack& s) {
    s.base = new int[MAXSIZE];
    if (!s.base) exit(OVERFLOW);
    s.top = s.base;
    s.stacksize = 3;
    return OK;
}
status Push(SqStack& s, int e) {
    if (s.top - s.base == s.stacksize) return ERROR;
    *s.top = e;
    s.top++;
    return OK;
}

status Pop(SqStack& s, int& e) {
    if (s.top == s.base) return ERROR;
    s.top--;
    e = *s.top;
    return OK;
}
int GetTop(SqStack s) {
    if (s.top != s.base) return *(s.top - 1);
}
status IsEmpty(SqStack s) {
    if (s.top == s.base) return 1;
    else return 0;
}
int FullStack(SqStack s) {
    if (s.top - s.base == s.stacksize) {
        return OK;
    }
    else {
        return -1;
    }
}
status StackShow(SqStack s) {
    if (s.top == s.base) { return ERROR; }
    else {
        int* p = s.base;
        while (p != s.top) {
            printf("\t%d", *p);
            p++;
        }
        printf("\n");
        return OK;
    }

}
void menu() {

    printf("************************************************************************************************\n");
    printf("\t\t\t\t欢迎进入顺序栈操作界面\n");
    printf("请从键盘输入数字,完成对应的操作(1到7为有效操作,输入其他退出程序)\n");
    printf("\t\t1.初始化顺序栈\n");
    printf("\t\t2.判断栈是否为空\n");
    printf("\t\t3.判断栈是否为满\n");
    printf("\t\t4.入栈\n");
    printf("\t\t5.出栈\n");
    printf("\t\t6.取栈顶元素\n");
    printf("\t\t7.输出该顺序栈\n");
    printf("************************************************************************************************\n");
}


void main() {
    menu();
    int flag = 1;
    int num = 0;
    int n = 0;

    int e = 0;
    SqStack s;
    while (flag)
    {
        printf("\n您选择的操作是:");
        scanf_s("%d", &num);
        switch (num) {
        case 1:
            n = InitStack(s);
            if (n) {
                printf("\n初始化成功");
            }
            else {
                printf("\n初始化失败");
            }
            break;
        case 2:
            n = IsEmpty(s);
            if (n) {
                printf("\n栈空");
            }
            else {
                printf("\n栈不为空");
            }
            break;
        case 3:
            n = FullStack(s);
            if (n == 1) {
                printf("\n栈满");
            }
            else {
                printf("\n栈未满");
            }
            break;
        case 4:
            printf("\n请输入需要入栈的值");
            scanf_s("%d", &e);
            n = Push(s, e);
            if (n) {
                printf("入栈成功\n");
            }
            else {
                printf("入栈失败\n");
            }

            break;
        case 5:
            e = 0;
            n = Pop(s, e);
            if (n) {
                printf("出栈成功,出栈值为%d\n", e);
            }
            else {
                printf("出栈失败\n");
            }
            break;
        case 6:
            n = GetTop(s);
            printf("取出栈顶元素成功,值为%d", n);
            break;
        case 7:
            StackShow(s);
            break;
        default:
            printf("退出程序");
            flag = 0;
        }
    }
}

posted on 2022-11-12 11:01  wshidaboss  阅读(87)  评论(0编辑  收藏  举报