编写一个程序,在自定义函数中完成下列功能并在主函数中进行测试(下列要求中所说的栈均指顺序栈): (1)初始化栈S。 (2)销毁栈S。 (3)判断栈S是否为空。 (4)将元素e入栈。 (5)将栈顶元素出栈并保存到元素e中。C语言
时间: 2024-10-11 07:15:34 浏览: 36
C语言程序设计-编写函数实现两个数据的交换,在主函数中输入任意三个数据,调用函数对这三个数据从大到小排序;.c
5星 · 资源好评率100%
在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;
}
// 销毁栈
void destroy(Stack *s) {
s->top = -1; // 清空栈顶指针
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return (s->top == -1);
}
// 入栈操作
void push(Stack *s, int e) {
if (s->top < MAX_SIZE - 1) { // 避免溢出
s->stack[++s->top] = e;
} else {
printf("Stack overflow.\n");
}
}
// 出栈操作
void pop(Stack *s, int* e) {
if (!isEmpty(s)) {
*e = s->stack[s->top--];
} else {
printf("Stack underflow.\n");
}
}
// 主函数测试
int main() {
Stack myStack;
init(&myStack);
if (!isEmpty(&myStack)) {
printf("Stack is not empty.\n");
} else {
printf("Stack is empty.\n");
}
push(&myStack, 5);
push(&myStack, 10);
int poppedEle;
pop(&myStack, &poppedEle);
printf("Popped element is: %d\n", poppedEle); // 输出:Popped element is: 10
if (isEmpty(&myStack)) {
printf("After popping, stack is empty.\n");
} else {
printf("After popping, stack is not empty.\n"); // 这里应该是错误的,因为栈应该空了
}
destroy(&myStack);
return 0;
}
```
这个程序首先定义了一个栈结构体,并实现了初始化、销毁、判断空、入栈和出栈的操作。然后在`main`函数中进行了测试。注意,在实际应用中,为了更严谨,栈溢出和下溢的情况需要有适当的错误处理。
阅读全文