用c语言实现双端栈定义一个空栈类,并定义入栈、出栈、取栈元素基本操作。然后在主程序中对给定的N个数据进行验证,输出各个操作结果。
时间: 2024-10-07 20:06:07 浏览: 47
在C语言中,我们可以创建一个名为`DoublyEndedStack`的结构体来实现双端栈,包含数组作为存储容器以及两个指针分别表示栈顶和栈底。以下是基本的定义和操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 双端栈结构体
typedef struct {
int* data; // 存储数据的数组
size_t top; // 栈顶索引
size_t bottom; // 栈底索引
size_t capacity; // 容量大小
} Doubly Ended Stack;
// 初始化一个空栈
void init_stack(Doubly Ended Stack* stack, size_t capacity) {
stack->data = (int*)malloc(capacity * sizeof(int));
stack->top = stack->bottom = 0;
stack->capacity = capacity;
}
// 入栈(添加元素)
void push(Doubly Ended Stack* stack, int value) {
if (stack->top == stack->capacity - 1) {
printf("Stack is full.\n");
return;
}
stack->data[stack->top++] = value;
}
// 出栈 删除并返回栈顶元素
int pop(Doubly Ended Stack* stack) {
if (stack->top == stack->bottom) {
printf("Stack is empty.\n");
return -1; // 返回特殊值表示栈空
}
return stack->data[stack->top--];
}
// 取栈顶元素但不删除
int peek(Doubly Ended Stack* stack) {
if (stack->top == stack->bottom) {
printf("Stack is empty.\n");
return -1; // 表示栈空
}
return stack->data[stack->top];
}
// 主函数测试
int main() {
Doubly Ended Stack stack;
const size_t N = 5;
init_stack(&stack, N);
for (size_t i = 0; i < N; ++i) {
push(&stack, i);
printf("Push %d: %d\n", i, peek(&stack)); // 输出栈顶元素
printf("Pop: %d\n", pop(&stack)); // 输出出栈元素
}
free(stack.data); // 清理内存
return 0;
}
```
在这个例子中,主程序会将0到4这五个整数依次入栈,然后每次出栈并打印其值。注意,这里没有进行错误处理,实际使用时应考虑边界条件和内存管理。
阅读全文