设计一个算法,利用顺序栈的基本运算输出栈中从栈顶到栈底的所有元素,要求保持栈中的元素不变 用C语言
时间: 2024-03-10 19:45:52 浏览: 84
可以通过循环出栈并输出的方式实现输出栈中从栈顶到栈底的所有元素,不需要改变栈中元素的顺序。以下是C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义栈的最大容量
typedef struct Stack {
int data[MAXSIZE]; // 存储栈中元素的数组
int top; // 栈顶指针
} Stack;
// 初始化栈
void InitStack(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int IsEmpty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
int IsFull(Stack *s) {
return s->top == MAXSIZE - 1;
}
// 入栈
void Push(Stack *s, int x) {
if (IsFull(s)) {
printf("Stack is full.\n");
exit(1);
} else {
s->top++;
s->data[s->top] = x;
}
}
// 出栈
int Pop(Stack *s) {
int x;
if (IsEmpty(s)) {
printf("Stack is empty.\n");
exit(1);
} else {
x = s->data[s->top];
s->top--;
}
return x;
}
// 输出栈中从栈顶到栈底的所有元素
void PrintStack(Stack *s) {
Stack temp; // 定义一个临时栈
InitStack(&temp); // 初始化临时栈
while (!IsEmpty(s)) {
int x = Pop(s); // 出栈
printf("%d ", x); // 输出元素
Push(&temp, x); // 将元素压入临时栈
}
// 将元素从临时栈再压回原栈,恢复原栈状态
while (!IsEmpty(&temp)) {
int x = Pop(&temp);
Push(s, x);
}
}
int main() {
Stack s;
InitStack(&s);
Push(&s, 1);
Push(&s, 2);
Push(&s, 3);
Push(&s, 4);
Push(&s, 5);
printf("Stack elements from top to bottom: ");
PrintStack(&s);
printf("\n");
return 0;
}
```
输出结果为:
```
Stack elements from top to bottom: 5 4 3 2 1
```
阅读全文