版权声明:Sock的blog, 可以偷看但不可以偷走哦 https://blog.csdn.net/qq_42957923/article/details/85214312
共享栈的基本操作
共享栈是用顺序表实现, 在两端分别设置为栈底, 并且分别初始化栈顶, 实现可以在两端进行入栈和出栈操作, 并且互不干扰, 模拟分工成两个栈, 当两个栈顶索引重合时, 这代表该共享栈已满.
具体实现
定义一个共享栈
//定义一个共享栈
typedef struct {
int stack[100];
int top[2];
}SqStack;
初始化
//对共享栈进行初始化
void InitStack(SqStack* S) {
S->top[0] = 0;
S->top[1] = 99;
}
压栈操作
//压栈操作
void Push(SqStack* S, int e, int flag) {
//判断栈是否为满
if (S->top[0] == S->top[1]) {
printf("栈满\n");
return;
}
if (flag == 0) {
S->stack[S->top[0]] = e;
++S->top[0];
return;
} else if (flag == 1) {
S->stack[S->top[1]] = e;
--S->top[1];
return;
} else {
printf("输入有误\n");
return;
}
}
出栈操作
//出栈操作
int Pop(SqStack* S, int flag) {
//判断栈是否为空
if ((flag == 0 && S->top[flag] == 0)
|| (flag == 1 && S->top[flag] == 99)) {
printf("栈为空\n");
return 0;
}
if (flag == 0) {
--S->top[flag];
return S->stack[S->top[flag]];
} else if (flag == 1) {
++S->top[flag];
return S->stack[S->top[flag]];
} else {
printf("输入有误\n");
return 0;
}
}
测试
#include <stdio.h>
#include <windows.h>
//定义一个共享栈
typedef struct {
int stack[100];
int top[2];
}SqStack;
//对共享栈进行初始化
void InitStack(SqStack* S) {
S->top[0] = 0;
S->top[1] = 99;
}
//压栈操作
void Push(SqStack* S, int e, int flag) {
//判断栈是否为满
if (S->top[0] == S->top[1]) {
printf("栈满\n");
return;
}
if (flag == 0) {
S->stack[S->top[0]] = e;
++S->top[0];
return;
} else if (flag == 1) {
S->stack[S->top[1]] = e;
--S->top[1];
return;
} else {
printf("输入有误\n");
return;
}
}
//出栈操作
int Pop(SqStack* S, int flag) {
//判断栈是否为空
if ((flag == 0 && S->top[flag] == 0)
|| (flag == 1 && S->top[flag] == 99)) {
printf("栈为空\n");
return 0;
}
if (flag == 0) {
--S->top[flag];
return S->stack[S->top[flag]];
} else if (flag == 1) {
++S->top[flag];
return S->stack[S->top[flag]];
} else {
printf("输入有误\n");
return 0;
}
}
int main() {
SqStack s1;
InitStack(&s1);
for (int i = 0; i < 3; ++i) {
Push(&s1, i + 1, 0);
Push(&s1, 10 - i, 1);
}
for (int i = 0; i < 3; ++i) {
printf("%d ", Pop(&s1, 0));
}
printf("\n");
for (int i = 0; i < 3; ++i) {
printf("%d ", Pop(&s1, 1));
}
printf("\n");
system("pause");
return 0;
}
效果图
希望该文章对大家有所帮助
同时真诚接受大家宝贵的评论的建议