让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
以下是C++实现顺序栈的基本操作函数的完整代码,包括判断栈是否为满、是否为空、求栈元素个数、进栈和出栈等功能。同时,在主函数中演示了如何使用这些函数实现题目所要求的功能。
#include <iostream>
using namespace std;
#define MAXSIZE 100 // 定义栈的最大容量
typedef int SElemType; // 栈中元素类型
typedef struct {
SElemType data[MAXSIZE]; // 存放栈中元素
int top; // 栈顶指针,指向栈顶元素的下标
} SqStack; // 顺序栈类型定义
// 构造一个空栈S
void InitStack(SqStack &S) {
S.top = -1;
}
// 销毁栈S,S不再存在
void DestroyStack(SqStack &S) {
S.top = -1;
}
// 把S置为空栈
void ClearStack(SqStack &S) {
S.top = -1;
}
// 判断栈S是否为空栈,若是返回TRUE,否则返回FALSE
int StackEmpty(SqStack S) {
if (S.top == -1) {
return 1; // 空栈
} else {
return 0; // 非空栈
}
}
// 返回栈S的元素个数,即栈的长度
int StackLength(SqStack S) {
return S.top + 1;
}
// 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
int GetTop(SqStack S, SElemType &e) {
if (S.top == -1) {
return 0; // 栈空,返回ERROR
} else {
e = S.data[S.top]; // 用e返回栈顶元素
return 1; // 返回OK
}
}
// 插入元素e为新的栈顶元素
void Push(SqStack &S, SElemType e) {
if (S.top == MAXSIZE - 1) {
cout << "栈已满,不能插入元素!" << endl;
} else {
S.top++;
S.data[S.top] = e;
}
}
// 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
int Pop(SqStack &S, SElemType &e) {
if (S.top == -1) {
return 0; // 栈空,返回ERROR
} else {
e = S.data[S.top]; // 用e返回栈顶元素
S.top--; // 栈顶指针减1,相当于删除栈顶元素
return 1; // 返回OK
}
}
// 从栈底到栈顶依次对栈中每个元素调用函数visit,并输出
void StackTraverse(SqStack S, void(*visit)(SElemType)) {
int i;
for (i = 0; i <= S.top; ++i) {
visit(S.data[i]);
}
}
// 输出元素
void print(SElemType x) {
cout << x << " ";
}
int main() {
SqStack s;
InitStack(s); // 构造一个空栈
int n, i, e;
cin >> n;
for (i = 0; i < n; ++i) {
cin >> e;
Push(s, e); // 把e插入到栈顶
}
cout << "栈中元素依次为:";
StackTraverse(s, print); // 从栈底到栈顶输出栈中所有元素
cout << endl;
cout << "弹出的栈顶元素e=";
Pop(s, e); // 弹出栈顶元素
cout << e << endl;
cout << "栈空否:" << StackEmpty(s) << "(1:空0:否)" << endl;
if (GetTop(s, e)) { // 取栈顶元素,并判断栈是否为空
cout << "栈顶元素e=" << e << ",栈的长度为" << StackLength(s) << endl;
} else {
cout << "栈已空!" << endl;
}
ClearStack(s); // 清空栈
cout << "清空栈后,栈空否:" << StackEmpty(s) << "(1:空0:否)" << endl;
return 0;
}
输入样例:
12
12 47 5 8 6 92 45 63 75 384 29
输出样例:
栈中元素依次为:12 47 5 8 6 92 45 63 75 384 29
弹出的栈顶元素e=29
栈空否:0(1:空0:否)
栈顶元素e=384,栈的长度为10
清空栈后,栈空否:1(1:空0:否)