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

版权声明: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;
}

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

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

猜你喜欢

转载自blog.csdn.net/qq_42957923/article/details/85214312
今日推荐