C/C++实现共享栈

何为共享栈

C/C++实现共享栈
两个栈共享一个存储空间。两个栈的指针分别为top1和top2。

 

基本功能

1.初始化共享栈
2.判断共享栈是否为空
3.栈1和栈2:进栈、出栈
4.获得栈1和栈2的栈顶元素

 

代码

#include <iostream>
#include <stdlib.h>

#define MaxSize 10

using namespace std;

typedef int ElemType;

typedef struct{
	ElemType data[MaxSize];
	int top1;
	int top2;
}ShStack;

void InitStack(ShStack &S);//初始化共享栈 
bool StackEmpty(ShStack &S);//判栈空 
bool Push1(ShStack &S,ElemType x);//栈1:进栈 
bool Push2(ShStack &S,ElemType x);//栈2:进栈 
bool Pop1(ShStack &S,ElemType &x);//栈1:出栈 
bool Pop2(ShStack &S,ElemType &x);//栈2:出栈 
bool GetTop1(ShStack S,ElemType &x);//栈1:获得栈顶元素 
bool GetTop2(ShStack S,ElemType &x);//栈2:获得栈顶元素 

//初始化共享栈 
void InitStack(ShStack &S){
	S.top1=-1;
	S.top2=MaxSize;
}

//判栈空 
bool StackEmpty(ShStack &S){
	if(S.top1==-1&&S.top2==MaxSize){
		return true;
	}else{
		return false;
	}
}

//栈1:进栈
bool Push1(ShStack &S,ElemType x){
	if(S.top1+1==S.top2)return false;//栈满
	S.data[++S.top1]=x;
	return true; 
} 

//栈2:进栈 
bool Push2(ShStack &S,ElemType x){
	if(S.top2-1==S.top1)return false;
	S.data[--S.top2]=x;
	return true; 
}

//栈1:出栈 
bool Pop1(ShStack &S,ElemType &x){
	if(S.top1==-1)return false;
	x=S.data[S.top1--];
	return true;
}

//栈2:出栈 
bool Pop2(ShStack &S,ElemType &x){
	if(S.top2==MaxSize)return false;
	x=S.data[S.top2++];
	return true;
}

//栈1:获得栈顶元素
bool GetTop1(ShStack S,ElemType &x){
	if(S.top1==-1)return false;
	x=S.data[S.top1];
	return true;
}

//栈2:获得栈顶元素 
bool GetTop2(ShStack S,ElemType &x){
	if(S.top2==MaxSize)return false;
	x=S.data[S.top2];
	return true;
}


int main(){
	ElemType x;
	ShStack S;
	InitStack(S);
	Push1(S,1);
	Push1(S,2);
	Push1(S,3);
	
	Push2(S,50);
	Push2(S,51);
	Push2(S,52);
	Push2(S,53);
	Push2(S,54);
	Push2(S,55);
	Push2(S,56);
	
	if(Push1(S,4)==true){
		printf("元素添加成功!\n");
	}else{
		printf("元素添加失败!\n");
	}
	
	if(Push2(S,57)==true){
		printf("元素添加成功!\n");
	}else{
		printf("元素添加失败!\n");
	}
	
	while(GetTop1(S,x)){
		printf("%d ",x);
		Pop1(S,x);
	}
	printf("\n"); 
	
	while(GetTop2(S,x)){
		printf("%d ",x);
		Pop2(S,x);
	}
	printf("\n");
	
	if(StackEmpty(S)){
		printf("共享栈为空!\n");
	}else{
		printf("共享栈不为空!\n");
	}
	
	return 0;
}
上一篇:顺序表插入、删除算法用C语言来实现


下一篇:java写入csv文件