双栈的基本操作1.初始化 2.入栈 3.出栈 4.判定栈空 5.判定栈满 0.退出 实现C语言
时间: 2024-10-12 07:04:35 浏览: 5
双栈是一种数据结构,它包含了两个独立的栈。以下是用C语言实现双栈及其基本操作的简单示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} StackNode;
// 定义第一个栈
StackNode stack1[100];
int top1 = -1; // 标记栈顶
// 定义第二个栈
StackNode stack2[100];
int top2 = -1; // 同上,标记栈顶
// 初始化双栈
void init() {
top1 = top2 = -1;
}
// 入栈 (同时在两个栈中)
void push(int value) {
if (top1 == 99) { // 判定第一个栈是否已满
printf("Stack 1 is full.\n");
return;
}
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->data = value;
newNode->next = stack1[top1]; // 保存当前栈顶元素
stack1[++top1] = newNode;
if (top2 == 99) { // 判定第二个栈是否已满
printf("Stack 2 is full.\n");
} else {
newNode->next = stack2[top2]; // 如果第二个栈不满,更新指针
stack2[++top2] = newNode;
}
}
// 出栈 (从第一个栈开始,如果第一个为空则出第二个)
int pop() {
if (top1 == -1) { // 判定第一个栈是否为空
if (top2 == -1) {
printf("Both stacks are empty.\n");
return -1; // 没有栈元素可以弹出
}
StackNode* temp = stack2[top2];
stack2[top2--] = NULL; // 更新栈顶并释放内存
return temp->data;
} else {
StackNode* temp = stack1[top1];
stack1[top1--] = NULL; // 更新栈顶并释放内存
return temp->data;
}
}
// 判断栈是否为空
int is_empty() {
return (top1 == -1 && top2 == -1);
}
// 主函数演示操作
int main() {
init();
push(1);
push(2);
push(3);
printf("Top of stack 1: %d\n", pop());
printf("Top of stack 2: %d\n", pop());
if (is_empty()) {
printf("Both stacks are now empty.\n");
}
return 0;
}
```