用栈的基本运算设计一个C语言算法,从栈顶到栈底输出栈中的所有元素,要求仍保持栈中元素不变
时间: 2023-06-17 10:03:06 浏览: 50
以下是使用栈的基本运算从栈顶到栈底输出栈中所有元素的 C 语言算法:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct
{
int data[MAX_SIZE];
int top;
} Stack;
void initStack(Stack *s)
{
s->top = -1;
}
int isStackEmpty(Stack *s)
{
return s->top == -1;
}
int isStackFull(Stack *s)
{
return s->top == MAX_SIZE - 1;
}
void push(Stack *s, int value)
{
if (isStackFull(s))
{
printf("Stack overflow!\n");
exit(EXIT_FAILURE);
}
s->top++;
s->data[s->top] = value;
}
int pop(Stack *s)
{
if (isStackEmpty(s))
{
printf("Stack underflow!\n");
exit(EXIT_FAILURE);
}
int value = s->data[s->top];
s->top--;
return value;
}
int peek(Stack *s)
{
if (isStackEmpty(s))
{
printf("Stack underflow!\n");
exit(EXIT_FAILURE);
}
return s->data[s->top];
}
void printStackElements(Stack *s)
{
if (isStackEmpty(s))
{
printf("Stack is empty!\n");
return;
}
int value = pop(s);
printf("%d ", value);
printStackElements(s);
push(s, value);
}
int main()
{
Stack s;
initStack(&s);
push(&s, 10);
push(&s, 20);
push(&s, 30);
push(&s, 40);
printf("Stack elements from top to bottom are: ");
printStackElements(&s);
printf("\n");
return 0;
}
```
该算法中,我们首先定义了一个结构体 `Stack`,其中包含一个整型数组 `data` 和一个整型变量 `top`,用于表示栈的当前元素个数和栈顶元素位置。然后,我们实现了栈的基本运算,包括初始化栈、判断栈是否为空或已满、入栈、出栈和取栈顶元素等。最后,我们定义了一个递归函数 `printStackElements`,该函数每次从栈顶取出一个元素并打印,然后递归调用自身来处理剩余元素,最后再将该元素入栈,以保持栈中元素不变。在 `main` 函数中,我们创建了一个栈 `s`,并向其中压入了四个元素,然后调用 `printStackElements` 函数输出栈中所有元素。