用C语言实现一个共享栈
时间: 2024-02-11 17:24:21 浏览: 32
以下是用 C 语言实现一个共享栈的示例代码:
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int top1; // 栈1的栈顶指针
int top2; // 栈2的栈顶指针
} SharedStack;
void initStack(SharedStack *s) {
s->top1 = -1;
s->top2 = MAX_SIZE;
}
void push1(SharedStack *s, int value) {
if (s->top1 + 1 == s->top2) {
printf("Stack Overflow!\n");
return;
}
s->data[++s->top1] = value;
}
void push2(SharedStack *s, int value) {
if (s->top2 - 1 == s->top1) {
printf("Stack Overflow!\n");
return;
}
s->data[--s->top2] = value;
}
int pop1(SharedStack *s) {
if (s->top1 == -1) {
printf("Stack Underflow!\n");
return -1;
}
return s->data[s->top1--];
}
int pop2(SharedStack *s) {
if (s->top2 == MAX_SIZE) {
printf("Stack Underflow!\n");
return -1;
}
return s->data[s->top2++];
}
int main() {
SharedStack stack;
initStack(&stack);
push1(&stack, 1);
push1(&stack, 2);
push2(&stack, 3);
push2(&stack, 4);
printf("%d\n", pop1(&stack)); // Output: 2
printf("%d\n", pop2(&stack)); // Output: 4
return 0;
}
```
上述代码中,我们使用一个结构体 `SharedStack` 来表示共享栈,其中包含一个数组来存储数据,以及两个指针 `top1` 和 `top2` 分别表示栈1和栈2的栈顶指针。
初始化栈时,将栈1的栈顶指针 `top1` 初始化为 -1,栈2的栈顶指针 `top2` 初始化为 `MAX_SIZE`。
通过 `push1` 和 `push2` 函数可以分别向栈1和栈2中压入元素。在压入元素之前,会先判断栈是否已满。
通过 `pop1` 和 `pop2` 函数可以分别从栈1和栈2中弹出元素。在弹出元素之前,会先判断栈是否为空。
在 `main` 函数中,我们展示了一些示例操作,包括压入元素和弹出元素。
相关推荐
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)