共享栈的入栈和出栈操作代码,数据结构
时间: 2023-10-19 22:49:01 浏览: 93
下面是一个简单的共享栈的入栈和栈操作的示例代码:
```c
#include <stdio.h>
#define MAX_SIZE 10
typedef struct {
int data[MAX_SIZE];
int top1; // 栈1的栈顶指针
int top2; // 栈2的栈顶指针
} SharedStack;
void initStack(SharedStack *stack) {
stack->top1 = -1; // 初始化栈1的栈顶指针
stack->top2 = MAX_SIZE; // 初始化栈2的栈顶指针
}
int isFull(SharedStack *stack) {
return stack->top1 + 1 == stack->top2; // 判断共享栈是否已满
}
int isEmpty(SharedStack *stack, int stackNum) {
if (stackNum == 1) {
return stack->top1 == -1; // 判断栈1是否为空
} else {
return stack->top2 == MAX_SIZE; // 判断栈2是否为空
}
}
void push(SharedStack *stack, int stackNum, int value) {
if (isFull(stack)) {
printf("Shared stack is full. Cannot push element.\n");
return;
}
if (stackNum == 1) {
stack->data[++stack->top1] = value; // 入栈到栈1
} else {
stack->data[--stack->top2] = value; // 入栈到栈2
}
}
int pop(SharedStack *stack, int stackNum) {
if (isEmpty(stack, stackNum)) {
printf("Stack %d is empty. Cannot pop element.\n", stackNum);
return -1;
}
if (stackNum == 1) {
return stack->data[stack->top1--]; // 从栈1出栈
} else {
return stack->data[stack->top2++]; // 从栈2出栈
}
}
int main() {
SharedStack stack;
initStack(&stack); // 初始化共享栈
push(&stack, 1, 10); // 将元素10入栈到栈1
push(&stack, 2, 20); // 将元素20入栈到栈2
int element1 = pop(&stack, 1); // 从栈1出栈
int element2 = pop(&stack, 2); // 从栈2出栈
printf("Popped element from stack 1: %d\n", element1);
printf("Popped element from stack 2: %d\n", element2);
return 0;
}
```
这是一个简单的共享栈的实现,其中使用一个结构体来表示共享栈,包含一个数组和两个栈顶指针。通过调用相应的入栈和出栈函数,可以将元素推入或弹出共享栈的不同栈中。在示例中,元素10被推入了栈1,元素20被推入了栈2,并通过出栈操作分别弹出了这两个元素。
希望这个示例能够帮助你理解共享栈的入栈和出栈操作。如果还有其他问题,请随时提问。
阅读全文