数据结构--栈和队列3.2(中缀--》后缀)

#include 
#include 
#include 
#include 

#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10
#define MAXBUFFER 10

typedef  char ElemType;
typedef struct
{
	ElemType *base;
	ElemType *top;
	int stackSize;
}sqStack;
//创建一个栈 
void InitStack(sqStack *s)
{
	s->base = (ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
	if(!s->base)
		exit(0);
	s->top = s->base;
	s->stackSize = STACK_INIT_SIZE;
}

void Push(sqStack *s,ElemType e)
{
	if(s->top - s->base >= s->stackSize)
	{
		s->base = (ElemType *)realloc(s->base,(s->stackSize+STACKINCREMENT)*sizeof(ElemType));
		if(!s->base)
			exit(0);
		*(s->top)=e;
		s->top++;
	}
}
void Pop(sqStack *s,ElemType *e)
{
		if(s->top == s->base)
		{
			return ;
		}
		*e = *--(s->top);
}
	
	int StackLen(sqStack s)
	{
		return (s.top-s.base);
	}

int main()
{
	sqStack s;
	char c,e;

	InitStack(&s);
	printf("请按逆波兰表达式输入带计算数据,数据与运算符之间用空格隔开,以#作为结束标志:\n"); 
	scanf("%c",&c);
	while(c!='#')
	{
		while(c>='0'||c<='9')
		{
			printf("%c",c);
			scanf("%c",&c);
			if(c<'0'||c>'9')
			{
				printf(" ");
			}
		}
	    if(')'==c)
		{
			Pop(&s,&e);
			while('('!=e)
			{
				printf("%c",e);
				Pop(&s,&e);
			}
		}
		else if('+'==c||'-'==c)
		{
			if(!StackLen(s))
			{
				Push(&s,c);
			}
			else 
			{
				do
				{
					Pop(&s,&e);
					if('('==e)
					{
						Push(&s,e);
					}
					else
					{
						printf("%d",e);
					}
				}while(StackLen(s)&&'('!=e);
				Push(&s,c);
			}
		}
		else if('*'==c||'/'==c || '('==c)
		{
			Push(&s,c);
		}
		else if('#'==c)
		{
			break;
		}
		else
		{
			printf("\n出错,输入格式错误!\n");
			return -1;
		}
		scanf("%c",&c);	
	}
	while(StackLen(s))
	{
		Pop(&s,&e);
		printf("%c ",e);
	}
	return 0;
 } 
 

小编第一次学,零基础,有点懵,可以的话给点参考意见  T-T.......

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