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