共享栈的基本操作-C语言

64 篇文章 2 订阅
15 篇文章 0 订阅

共享栈的基本操作

共享栈是用顺序表实现, 在两端分别设置为栈底, 并且分别初始化栈顶, 实现可以在两端进行入栈和出栈操作, 并且互不干扰, 模拟分工成两个栈, 当两个栈顶索引重合时, 这代表该共享栈已满.

具体实现

定义一个共享栈

//定义一个共享栈
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;
}

效果图
在这里插入图片描述

希望该文章对大家有所帮助
同时真诚接受大家宝贵的评论的建议

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值