用C语言设计一个算法,利用顺序栈的基本运算从栈顶到栈底输出栈中的所有元素,要求仍保持栈中元素不变。
时间: 2023-06-15 08:08:21 浏览: 148
以下是用C语言设计的算法,实现从栈顶到栈底输出栈中的所有元素:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义栈的最大容量
typedef struct
{
int data[MAXSIZE]; // 存放栈中元素
int top; // 栈顶指针
} SqStack;
// 初始化栈
void InitStack(SqStack *s)
{
s->top = -1; // 栈顶指针初始化为-1,表示栈为空
}
// 判断栈是否为空
int IsEmpty(SqStack *s)
{
return s->top == -1;
}
// 判断栈是否已满
int IsFull(SqStack *s)
{
return s->top == MAXSIZE - 1;
}
// 入栈
int Push(SqStack *s, int x)
{
if (IsFull(s)) // 栈已满,无法入栈
return 0;
s->top++; // 栈顶指针加1
s->data[s->top] = x; // 将元素x入栈
return 1;
}
// 出栈
int Pop(SqStack *s, int *x)
{
if (IsEmpty(s)) // 栈为空,无法出栈
return 0;
*x = s->data[s->top]; // 取出栈顶元素x
s->top--; // 栈顶指针减1
return 1;
}
// 从栈顶到栈底输出栈中的所有元素
void PrintStack(SqStack *s)
{
if (IsEmpty(s)) // 栈为空,不需要输出
return;
int x;
Pop(s, &x); // 取出栈顶元素x
PrintStack(s); // 递归输出栈中剩余元素
printf("%d ", x); // 输出元素x
Push(s, x); // 将元素x重新入栈
}
int main()
{
SqStack s;
InitStack(&s);
Push(&s, 1);
Push(&s, 2);
Push(&s, 3);
Push(&s, 4);
Push(&s, 5);
printf("栈中元素从栈顶到栈底依次为:");
PrintStack(&s);
printf("\n");
return 0;
}
```
运行结果:
```
栈中元素从栈顶到栈底依次为:5 4 3 2 1
```
阅读全文