雙向棧表
include <stdio.h>
include <stdlib.h>
include <stdbool.h>
define MAXSIZE 100 // 定義數(shù)組的最大長度
typedef struct {
int data[MAXSIZE];
int top1; // 第一個棧的棧頂指針
int top2; // 第二個棧的棧頂指針
} DoubleStack;
// 初始化雙棧
void initStack(DoubleStack *stack) {
stack->top1 = -1;
stack->top2 = MAXSIZE;
}
// 檢查第一個棧是否滿
bool isFullStack1(DoubleStack *stack) {
return stack->top1 + 1 == stack->top2;
}
// 檢查第一個棧是否為空
bool isEmptyStack1(DoubleStack *stack) {
return stack->top1 == -1;
}
// 檢查第二個棧是否滿
bool isFullStack2(DoubleStack *stack) {
return stack->top2 - 1 == stack->top1;
}
// 檢查第二個棧是否為空
bool isEmptyStack2(DoubleStack *stack) {
return stack->top2 == MAXSIZE;
}
// 向第一個棧壓入元素
bool pushStack1(DoubleStack *stack, int value) {
if (isFullStack1(stack)) {
printf("Stack 1 is full!\n");
return false;
}
stack->data[++(stack->top1)] = value;
return true;
}
// 從第一個棧彈出元素
bool popStack1(DoubleStack *stack, int *value) {
if (isEmptyStack1(stack)) {
printf("Stack 1 is empty!\n");
return false;
}
*value = stack->data[(stack->top1)--];
return true;
}
// 向第二個棧壓入元素
bool pushStack2(DoubleStack *stack, int value) {
if (isFullStack2(stack)) {
printf("Stack 2 is full!\n");
return false;
}
stack->data[--(stack->top2)] = value;
return true;
}
// 從第二個棧彈出元素
bool popStack2(DoubleStack *stack, int *value) {
if (isEmptyStack2(stack)) {
printf("Stack 2 is empty!\n");
return false;
}
*value = stack->data[(stack->top2)++];
return true;
}
int main() {
DoubleStack stack;
initStack(&stack);
// 測試第一個棧
pushStack1(&stack, 10);
pushStack1(&stack, 20);
int value;
popStack1(&stack, &value);
printf("Popped from Stack 1: %d\n", value);
// 測試第二個棧
pushStack2(&stack, 30);
pushStack2(&stack, 40);
popStack2(&stack, &value);
printf("Popped from Stack 2: %d\n", value);
return 0;
}

浙公網(wǎng)安備 33010602011771號