用C语言编写一个程序,在自定义函数中完成下列功能并在主函数中进行测试(下列要求中所说的栈均指顺序栈):(1)创建并初始化栈S。(2)判断栈S是否为空。(3)元素入栈,入栈元素:()()[([])]。(4)将栈顶元素出栈、保存到元素e中并输出。(5)销毁栈S。
时间: 2024-10-09 22:07:36 浏览: 25
在C语言中,我们可以使用数组来模拟顺序栈(因为数组底层就是通过连续的内存空间实现的)。下面是一个简单的实现:
```c
#include <stdio.h>
#define MAX_SIZE 10
// 定义栈结构体
typedef struct {
int stack[MAX_SIZE]; // 栈元素存储位置
int top; // 栈顶指针
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int is_empty(Stack *s) {
return s->top == -1;
}
// 元素入栈
void push(Stack *s, int value) {
if (s->top < MAX_SIZE - 1) {
s->stack[++s->top] = value;
} else {
printf("Stack overflow! Cannot push.\n");
}
}
// 出栈并返回栈顶元素
int pop(Stack *s, int *e) {
if (!is_empty(s)) {
*e = s->stack[s->top--];
return 1; // 成功出栈
} else {
printf("Stack underflow! Cannot pop.\n");
return 0; // 栈空无法出栈
}
}
// 销毁栈
void destroy(Stack *s) {
s->top = -1; // 重置栈顶指针
}
// 测试函数
int main() {
Stack S;
init(&S);
// 入栈元素
push(&S, '()');
push(&S, ')');
push(&S, '(');
push(&S, '[');
push(&S, ']');
// 判断栈是否为空
if (is_empty(&S)) {
printf("Stack is empty.\n");
}
// 出栈并打印
int e;
if (pop(&S, &e)) {
printf("Popped element: %d\n", e);
}
// 销毁栈
destroy(&S);
return 0;
}
```
这个程序首先定义了一个栈结构体,包含了栈的数组和栈顶指针。然后实现了栈的初始化、判断是否为空、入栈、出栈和销毁操作。在`main`函数中,我们按照题目要求对栈进行了操作,并展示了如何读取和删除栈顶元素。请注意,这里并没有处理栈溢出或欠溢的情况,实际应用中需要加上错误检查。