_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
",e1,e2); printf("S1 :"); i=0; while(!StackEmpty(S1,0)) { PopStack(&S1,&e1,0); printf("%4c",e1); } printf("
"); printf("S2 :"); while(!StackEmpty(S2,1)) { PopStack(&S2,&e2,1); printf("%4c",e2); } printf("
"); system("pause"); }

좋은 웹페이지 즐겨찾기