在c语言中,编写一个程序实现栈的入栈,出栈,取栈顶元素和遍历栈操作;基于顺序栈实现数值转换,括号匹配
时间: 2024-10-08 16:17:08 浏览: 40
在 C 语言中,我们通常会通过结构体定义一个简单的顺序栈(基于数组),并提供基本的 push (入栈), pop (出栈), top (获取栈顶元素) 和 traverse (遍历) 函数。这里是一个基础的例子:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈结构体
typedef struct {
int* elements; // 存储元素的数组
int top; // 栈顶指针
int capacity; // 栈的最大容量
} Stack;
// 初始化栈
Stack* init_stack(int size) {
Stack* stack = malloc(sizeof(Stack));
if (!stack) {
printf("Memory allocation failed.\n");
return NULL;
}
stack->elements = malloc(size * sizeof(int));
stack->top = -1;
stack->capacity = size;
return stack;
}
// 入栈(push)
void push(Stack* stack, int value) {
if (stack->top == stack->capacity - 1) {
printf("Stack overflow.\n");
return;
}
stack->top++;
stack->elements[stack->top] = value;
}
// 出栈(pop)
int pop(Stack* stack) {
if (stack->top == -1) {
printf("Stack underflow.\n");
return -1; // 返回特殊值表示空栈
}
int value = stack->elements[stack->top];
stack->top--;
return value;
}
// 取栈顶元素
int get_top(Stack* stack) {
if (stack->top == -1) {
printf("Stack is empty.\n");
return -1;
}
return stack->elements[stack->top];
}
// 遍历栈
void traverse(Stack* stack) {
if (stack->top == -1) {
printf("Stack is empty.\n");
return;
}
for (int i = 0; i <= stack->top; i++) {
printf("%d ", stack->elements[i]);
}
printf("\n");
}
// 示例:基于栈的数值转换和括号匹配
int main() {
Stack* stack = init_stack(5);
// ... 你可以在这里添加入栈操作,例如 `push(stack, 1); push(stack, 'a');`
int value = get_top(stack); // 获取栈顶元素
printf("Top element: %d\n", value);
int popped_value = pop(stack); // 出栈,并打印结果
printf("Popped element: %d\n", popped_value);
// 遍历栈,检查括号匹配
traverse(stack);
free(stack->elements);
free(stack);
return 0;
}
```
阅读全文