为双向栈设计初始化 入栈 出栈
时间: 2023-06-12 17:03:16 浏览: 127
栈的创建,入栈,出栈
5星 · 资源好评率100%
双向栈通常由两个栈组成,一个栈从左端入栈,另一个栈从右端入栈。因此,为了设计双向栈的初始化,我们需要初始化两个栈。
以下是一个简单的双向栈的初始化,入栈和出栈的实现:
```
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int top_left; // 左边栈的栈顶指针
int top_right; // 右边栈的栈顶指针
} DoubleStack;
// 双向栈的初始化
void init(DoubleStack *p_stack) {
p_stack->top_left = -1;
p_stack->top_right = MAXSIZE;
}
// 左侧入栈
void push_left(DoubleStack *p_stack, int value) {
if (p_stack->top_left + 1 == p_stack->top_right) {
printf("Stack overflow!");
return;
}
p_stack->top_left++;
p_stack->data[p_stack->top_left] = value;
}
// 右侧入栈
void push_right(DoubleStack *p_stack, int value) {
if (p_stack->top_left + 1 == p_stack->top_right) {
printf("Stack overflow!");
return;
}
p_stack->top_right--;
p_stack->data[p_stack->top_right] = value;
}
// 左侧出栈
int pop_left(DoubleStack *p_stack) {
if (p_stack->top_left == -1) {
printf("Stack underflow!");
return -1;
}
int value = p_stack->data[p_stack->top_left];
p_stack->top_left--;
return value;
}
// 右侧出栈
int pop_right(DoubleStack *p_stack) {
if (p_stack->top_right == MAXSIZE) {
printf("Stack underflow!");
return -1;
}
int value = p_stack->data[p_stack->top_right];
p_stack->top_right++;
return value;
}
```
在这个双向栈的实现中,我们使用了一个结构体来存储栈的数据和两个栈顶指针。`init` 函数用于初始化双向栈的栈顶指针。`push_left` 和 `push_right` 函数用于向左侧和右侧的栈中添加元素。`pop_left` 和 `pop_right` 函数用于从左侧和右侧的栈中弹出元素。如果栈已满或栈为空,则会显示错误消息。
这个双向栈的实现可以轻松地扩展到其他数据类型和操作,例如查找元素和获取栈的大小。
阅读全文