zoukankan      html  css  js  c++  java
  • _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");
    }

  • 相关阅读:
    win10+CUDA8.0+vs2013配置
    TX2更新源失败的问题
    并发编程--乐观锁与悲观锁
    并发编程--线程池
    并发编程--多线程基础(02)
    并发编程--多线程基础(01)
    搭建redis集群的过程中遇到的问题
    redis集群搭建(伪集群)
    关于maven项目中修改的JS不生效的解决方案
    【转载】IntelliJ IDEA 2017常用快捷键
  • 原文地址:https://www.cnblogs.com/javafly/p/6037157.html
Copyright © 2011-2022 走看看