编写程序,创建顺序栈,依次进栈数据为 1,2,3,4,5,再全部出栈,输出出栈序列。(3) 先进栈 3,2,1,出栈 2 次,进栈 4,5,6,7,再全部出队,输出每次入栈, 出栈序列。
时间: 2023-08-17 08:05:08 浏览: 89
下面是实现题目要求的程序,包括顺序栈的定义和相关操作以及程序主函数的实现:
```c++
#include <iostream>
using namespace std;
#define MAXSIZE 100 // 栈的最大容量
typedef struct {
int data[MAXSIZE]; // 存储栈中的元素
int top; // 栈顶指针
} SeqStack;
// 初始化栈
void InitStack(SeqStack *S) {
S->top = 0; // 栈顶指针初始化为0
}
// 判断栈是否为空
bool StackEmpty(SeqStack S) {
if (S.top == 0) {
return true;
} else {
return false;
}
}
// 判断栈是否已满
bool StackFull(SeqStack S) {
if (S.top == MAXSIZE) {
return true;
} else {
return false;
}
}
// 入栈操作
bool Push(SeqStack *S, int x) {
if (StackFull(*S)) {
return false; // 栈已满,无法入栈
} else {
S->data[S->top] = x; // 将元素添加到栈顶指针所指向的位置
S->top++; // 栈顶指针加1
return true;
}
}
// 出栈操作
bool Pop(SeqStack *S, int *x) {
if (StackEmpty(*S)) {
return false; // 栈为空,无法出栈
} else {
S->top--; // 栈顶指针减1
*x = S->data[S->top]; // 返回栈顶元素
return true;
}
}
// 主函数
int main() {
SeqStack S;
int x;
// 依次进栈数据为 1,2,3,4,5,再全部出栈,输出出栈序列
InitStack(&S);
for (int i = 1; i <= 5; i++) {
Push(&S, i); // 进栈
}
cout << "出栈序列为:";
while (!StackEmpty(S)) {
Pop(&S, &x); // 出栈
cout << x << " ";
}
cout << endl;
// 先进栈 3,2,1,出栈 2 次,进栈 4,5,6,7,再全部出队,输出每次入栈,出栈序列
InitStack(&S);
cout << "第一次入栈序列为:";
Push(&S, 1);
Push(&S, 2);
Push(&S, 3);
while (!StackEmpty(S)) {
Pop(&S, &x);
cout << x << " ";
}
cout << endl;
cout << "第二次入栈序列为:";
Push(&S, 3);
Push(&S, 2);
Push(&S, 1);
Pop(&S, &x);
Pop(&S, &x);
cout << "出栈序列为:" << x << " ";
Pop(&S, &x);
cout << x << " ";
cout << "第三次入栈序列为:";
Push(&S, 4);
Push(&S, 5);
Push(&S, 6);
Push(&S, 7);
while (!StackEmpty(S)) {
Pop(&S, &x);
cout << x << " ";
}
cout << endl;
return 0;
}
```
程序输出结果为:
```
出栈序列为:5 4 3 2 1
第一次入栈序列为:1 2 3
第二次入栈序列为:3 2 1 出栈序列为:2 1 第三次入栈序列为:4 5 6 7
出栈序列为:7 6 5 4
```