数据结构学习笔记(五)--------共享栈的顺序操作

一、简介

             关于数据结构学习的相关代码,是本人在学习过程中,完全根据自己的理解所写的一些基本操作,可能会产生一些错误,但本人写博客的原因只为记录一下个人的学习记录,如有读者看到本人博客有错误的地方,请指正。

二、具体实现

#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 100//定义一个宏,代表初始化数组的大小
//共享顺序栈
struct ShareSqu
{
	int arr[MAXSIZE];
	int top[2];//记录两个栈底下标
};
//对栈进行初始化
void InitStack(ShareSqu *stack){
	stack->top[0] = -1;//-1表示栈空
	stack->top[1] = MAXSIZE - 1;//表示栈空
}
//进栈又称压栈 data表示要进栈的数据 flag表示选择进哪个栈
bool push(ShareSqu *stack,int data,int flag){
	if (stack->top[1] - stack->top[0] == 1){
		return false;  
	}
	if (flag == 0){
		stack->arr[++stack->top[0]] = data;
		return true;
	}
	else if(flag ==1){
		stack->arr[stack->top[1]--] = data;
		return true;
	}
	return false;

}
//data用于记录或者保存要出栈的数据 flag表示选择哪个栈进行出栈操作
bool pop(ShareSqu *stack, int data, int flag){
	//条件一,表示栈一为空 条件2表示栈二为空
	if ((flag==0&&stack->top[0]==-1)&&(flag==1&&stack->top[1]==MAXSIZE-1)){
		
		return false;
	}
	if (flag==0){
		//栈底是-1,这里要后减
		data = stack->arr[stack->top[0]--];
		printf("%d",data);
		return true;
	}
	else if (flag==1){
		//采用数组的尾部作为栈底,栈的其实栈底为MAXSIZE-1,这里要先加
		data = stack->arr[++stack->top[1]];
		printf("%d", data);
		return true;
	}
	return false;
}
void main(){
	ShareSqu squ = { 0 };
	int data = 0;
	InitStack(&squ);
	if (push(&squ, 1, 0) && push(&squ, 2, 1) && push(&squ, 1, 0)){
		if (pop(&squ, data, 0), pop(&squ, data, 1),pop(&squ, data, 0)){
		}
		else{
		}
	}
	else{
		
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小生不财

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值