_DataStructure_C_Impl:共享栈

// _DataStructure_C_Impl:共享栈
#include<stdio.h>
#include<stdlib.h>
#define StackSize 100
typedef char DataType;
//两个共享栈的数据结构类型定义
typedef struct  
{
	DataType stack[StackSize];
	int top[2];
}SSeqStack;
//共享栈的初始化操作
void InitStack(SSeqStack *S){
	S->top[0]=0;
	S->top[1]=StackSize-1;
}
//共享栈进栈操作。进栈成功返回1,否则返回0
int PushStack(SSeqStack *S,DataType e,int flag){
	if(S->top[0]==S->top[1])	//在进栈操作之前,判断共享栈是否为空
		return 0;
	switch(flag){
	case 0:		//当flag为0,表示元素要进左端的栈
		S->stack[S->top[0]]=e;	//元素进栈
		S->top[0]++;	//修改栈顶指针
		break;
	case 1:		//当flag为1,表示元素要进右端的栈
		S->stack[S->top[1]]=e;	//元素进栈
		S->top[1]--;	//修改栈顶指针
		break;
	default:
		return 0;
	}
	return 1;
}
//出栈操作
int PopStack(SSeqStack *S,DataType *e,int flag){
	switch(flag){		//在出栈操作之前,判断是哪个栈要进行出栈操作
	case 0:
		if(S->top[0]==0)	//左端的栈为空,则返回0,表示出栈操作失败
			return 0;
		S->top[0]--;	//修改栈顶指针
		*e=S->stack[S->top[0]];	//将出栈的元素赋值给e
		break;
	case 1:		
		if(S->top[1]==StackSize-1)		////右端的栈为空,则返回0,表示出栈操作失败
			return 0;
		S->top[1]++;		//修改栈顶指针
		*e=S->stack[S->top[1]];		//将出栈的元素赋值给e
		break;
	default:
		return 0;
	}
	return 1;
}
//取栈顶元素。将栈顶元素值返回给e,并返回1表示成功;否则返回0表示失败。
int GetTop(SSeqStack S,DataType *e,int flag){
	switch(flag){
	case 0:
		if(S.top[0]==0)
			return 0;
		*e=S.stack[S.top[0]-1];
		break;
	case 1:
		if(S.top[1]==StackSize-1)
			return 0;
		*e=S.stack[S.top[1]+1];
		break;
	default:
		return 0;
	}
	return 1;
}
int StackEmpty(SSeqStack S,int flag){
	switch(flag){
	case 0:
		if(S.top[0]==0)
			return 1;
		break;
	case 1:
		if(S.top[1]==StackSize-1)
			return 1;
		break;
	default:
		return 0;
	}
	return 0;
}
void main(){
	SSeqStack S1,S2;			/*定义一个栈*/
	int i;
	DataType a[]={'a','b','c','d','e'};
	DataType b[]={'x','y','z','r'};
	DataType e1,e2;
	InitStack(&S1);					/*初始化栈*/
	InitStack(&S2);
	for(i=0;i<sizeof(a)/sizeof(a[0]);i++)	/*将数组a中元素依次进栈*/
	{
		if(PushStack(&S1,a[i],0)==0)
		{
			printf("栈已满,不能进栈!");
			return;
		}
	}
	for(i=0;i<sizeof(b)/sizeof(b[0]);i++)	/*将数组b中元素依次进栈*/
	{
		if(PushStack(&S2,b[i],1)==0)
		{
			printf("栈已满,不能进栈!");
			return;
		}
	}	
	if(GetTop(S1,&e1,0)==0)
	{
		printf("栈已空");
		return;
	}
	if(GetTop(S2,&e2,1)==0)
	{
		printf("栈已空");
		return;
	}
	printf("栈S1的栈顶元素是:%c,栈S2的栈顶元素是:%c\n",e1,e2);
	printf("S1出栈的元素次序是:");
	i=0;
	while(!StackEmpty(S1,0))	
	{
		PopStack(&S1,&e1,0);
		printf("%4c",e1);	
	}
	printf("\n");
	printf("S2出栈的元素次序是:");
	while(!StackEmpty(S2,1))	
	{
		PopStack(&S2,&e2,1);
		printf("%4c",e2);
	}
	printf("\n");	
	system("pause");
}

你可能感兴趣的:(数据结构,栈)