编写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; } } }