用C语言编写一个程序。 创建一个包含数字元素的顺序栈,同时具有如下功能: 【1】初始化一个顺序栈 【2】输出顺序栈中各结点的值 【3】在顺序栈中插入值为x的新元素 【4】在顺序栈中出栈操作并打印被删除的元素 【5】给出当前的栈顶元素
时间: 2024-11-13 20:18:11 浏览: 27
在C语言中,我们可以使用数组来实现一个简单的顺序栈。以下是相应的函数实现:
```c
#include <stdio.h>
#define MAX_SIZE 100 // 定义栈的最大容量
// 结构体表示栈中的元素
typedef struct {
int data[MAX_SIZE]; // 数字元素存储区
int top; // 栈顶指针
} Stack;
// 初始化栈
void init(Stack* stack) {
stack->top = -1;
}
// 判断栈是否满
int is_full(Stack* stack) {
return stack->top == MAX_SIZE - 1;
}
// 判断栈是否空
int is_empty(Stack* stack) {
return stack->top == -1;
}
// 插入元素到栈顶
void push(Stack* stack, int value) {
if (is_full(stack)) {
printf("Stack overflow! Can't insert.\n");
return;
}
stack->data[++stack->top] = value;
}
// 出栈并打印元素
int pop(Stack* stack) {
if (is_empty(stack)) {
printf("Stack underflow! No element to pop.\n");
return -1; // 返回错误码
}
return stack->data[stack->top--];
}
// 输出栈中所有元素
void print_stack(Stack* stack) {
for (int i = 0; i <= stack->top; i++) {
printf("%d ", stack->data[i]);
}
printf("\n");
}
int main() {
Stack my_stack;
init(&my_stack);
// 示例:插入元素、输出、出栈
push(&my_stack, 1);
push(&my_stack, 2);
push(&my_stack, 3);
print_stack(&my_stack); // 应该显示:1 2 3
int popped_value = pop(&my_stack);
printf("Popped element: %d\n", popped_value); // 应该显示:3
print_stack(&my_stack); // 应该显示:1 2
return 0;
}
```
在这个程序中,我们首先定义了一个结构体`Stack`,包含了数据区`data`和栈顶指针`top`。然后实现了初始化、插入、出栈、查看栈顶以及打印栈的操作。
注意:这个示例中的栈并没有处理动态扩容,如果需要处理大量元素或不确定大小,可以考虑使用链表实现。此外,上述代码没有包含异常处理,实际使用时应添加适当的错误检查。
阅读全文