1.顺序栈的基本操作
- 需求分析:
建立基本的顺序栈,并能进行基本的初始化,入栈,出栈操作。 - 概要设计:
- 抽象数据结构:
ADT{
InitStack(SqStack& S) //初始化栈S
Push(SqStack& S, ElemType e) //将元素e入栈
Pop(SqStack& S,ElemType &e) //栈顶元素出栈,并记录该值到e
}
- 程序用到的函数及层次关系:
main()
{
Pop()
InitStack()
Push()
}
- 主程序流程:
初始化栈–>用户选择入栈,出栈还是打印栈顶元素–>执行操作
###3. 详细设计: - 定义顺序栈的基本数据结构:
#define maxsize 100
typedef int Status;
typedef int ElemType;
typedef struct {//顺序栈数据结构
ElemType* base;
ElemType* top;
int stacksize;
}SqStack;
- 定义栈的初始化函数:
Status InitStack(SqStack& S) {//初始化栈
S.base = (ElemType*)malloc(maxsize * sizeof(ElemType));
if (!S.base) return 0;
S.top = S.base;
S.stacksize = maxsize;
}
- 定义入栈函数:
Status Push(SqStack& S, ElemType e) {//入栈
if (S.top-S.base==S.stacksize) return 0;
*(S.top++) = e;
return 1;
}
- 定义打印栈顶元素的函数:
void Print_Top(SqStack& S) {//打印栈顶元素
if (S.base == S.top) printf("该栈为空栈!\n");
else {
ElemType* p = S.top;
p--;
printf("栈顶元素为%d\n", *p);
}
}
- 完整代码:
#include <cstdio>
#include <cstdlib>
#define maxsize 100
typedef int Status;
typedef int ElemType;
typedef struct {//顺序栈数据结构
ElemType* base;
ElemType* top;
int stacksize;
}SqStack;
Status InitStack(SqStack& S) {//初始化栈
S.base = (ElemType*)malloc(maxsize * sizeof(ElemType));
if (!S.base) return 0;
S.top = S.base;
S.stacksize = maxsize;
}
Status Push(SqStack& S, ElemType e) {//入栈
if (S.top-S.base==S.stacksize) return 0;
*(S.top++) = e;
return 1;
}
Status Pop(SqStack& S,ElemType &e) {//出栈
if (S.top == S.base) return 0;
e = *(--S.top);
return 1;
}
void Print_Top(SqStack& S) {//打印栈顶元素
if (S.base == S.top) printf("该栈为空栈!\n");
else {
ElemType* p = S.top;
p--;
printf("栈顶元素为%d\n", *p);
}
}
int main() {
SqStack S;
int m,n,p;
InitStack(S);
printf("1.入栈\n2.出栈\n3.打印栈顶元素\n4.结束\n");
printf("请选择操作:");
while (scanf_s("%d", &m) != EOF) {
switch (m) {
case 1:
printf("请输入入栈元素:");
scanf_s("%d", &n);
if (Push(S, n) == 1)
printf("入栈成功!\n");
else
printf("入栈失败,该栈已满\n");
break;
case 2:
if (Pop(S, p) == 1)
printf("出栈成功,出栈元素为:%d\n", p);
else
printf("出栈失败,该栈为空栈\n");
break;
case 3:
Print_Top(S);
break;
case 4:
return 0;
break;
}
printf("----------------------------------------\n");
printf("1.入栈\n2.出栈\n3.打印栈顶元素\n4.结束\n");
printf("请选择操作:");
}
}