编写一道程序,实现以下操作1.用C描述栈的每种操作在顺序栈或链栈上的实现。 2.将建栈、初始化栈、判断栈是否非空、求栈的长度、输出从栈顶到栈底的元素分别定义为5个子函数,通过主函数实现对上述子函数的调用。 3. 输入数据:数据域(data)设定为整型
时间: 2024-02-13 12:07:09 浏览: 76
以下是实现栈操作的程序,包括建栈、初始化栈、判断栈是否非空、求栈的长度、输出从栈顶到栈底的元素。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义栈的最大容量为100
typedef struct {
int data[MAXSIZE]; // 栈的存储空间
int top; // 栈顶指针
} Stack;
// 初始化栈
void InitStack(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int IsEmpty(Stack *s) {
return s->top == -1;
}
// 将元素x入栈
void Push(Stack *s, int x) {
if (s->top == MAXSIZE - 1) {
printf("栈已满,无法添加元素!\n");
return;
}
s->data[++s->top] = x;
}
// 将栈顶元素出栈并返回其值
int Pop(Stack *s) {
if (IsEmpty(s)) {
printf("栈为空,无法弹出元素!\n");
return -1;
}
return s->data[s->top--];
}
// 获取栈的长度
int StackLength(Stack *s) {
return s->top + 1;
}
// 输出栈中的元素
void PrintStack(Stack *s) {
printf("栈中的元素为:\n");
for (int i = s->top; i >= 0; i--) {
printf("%d\n", s->data[i]);
}
}
int main() {
Stack s;
InitStack(&s); // 初始化栈
Push(&s, 1); // 入栈
Push(&s, 2);
Push(&s, 3);
printf("栈的长度为:%d\n", StackLength(&s)); // 获取栈的长度
PrintStack(&s); // 输出栈中的元素
Pop(&s); // 出栈
printf("栈的长度为:%d\n", StackLength(&s));
PrintStack(&s);
return 0;
}
```
注意:为了避免栈溢出,需要在入栈操作时判断栈是否已满,出栈操作时判断栈是否为空。
阅读全文