真是一怠惰呢!!
目前对栈的应用并不是很深入了解,以及迷宫问题交给以后解决,下面的是求后缀表达式的代码
#include<stdio.h>
#include<stdlib.h>
#define maxSize 100
typedef struct LinkStNode
{
char data;
LinkStNode * next;
}LinkStNode;
void InitStack(LinkStNode * &s)
{
s = (LinkStNode*)malloc(sizeof(LinkStNode));
s->next = NULL;
}
void DestroyStack(LinkStNode * &s)
{
LinkStNode *pre,*p;
pre = s; p = s->next;
while (pre != NULL)
{
free(pre);
pre = p;
if (pre == NULL)
break;
p = pre->next;
}free(pre);
}
bool StackEmpty(LinkStNode * &s)
{
return(s->next==NULL);
}
bool Push(LinkStNode * &s, char e)
{
LinkStNode *p;
p = (LinkStNode*)malloc(sizeof(LinkStNode));
p->data = e;
p->next = s->next;
s->next = p;
return true;
}
bool Pop(LinkStNode * &s, char &e)
{
if (s->next == NULL)
return false;
LinkStNode *p=s->next;
e = p->data;
s->next = p->next;
free(p);
return true;
}
bool GetTop(LinkStNode *s, char &e)
{
if (s->next==NULL)
return false;
e = s->next->data;
return true;
}
void trans(char *exp, char postexp[])
{
char e;
LinkStNode * Optr;
InitStack(Optr);
int i = 0;
while (*exp != '\0')
{
switch (*exp)
{
case'(':
Push(Optr, '(');
exp++;
break;
case ')':
Pop(Optr, e);
while (e != '(')
{
postexp[i++] = e;
Pop(Optr, e);
}
exp++;
break;
case '+':
case '-':
while (!StackEmpty(Optr))
{
GetTop(Optr, e);
if (e != '(')
{
postexp[i++] = e;
Pop(Optr, e);
}
else
break;
}
Push(Optr, *exp);
exp++;
break;
case '*':
case '/':
while (!StackEmpty(Optr))
{
GetTop(Optr, e);
if (e == '*' || e == '/')
{
postexp[i++] = e;
Pop(Optr, e);
}
else
break;
}
Push(Optr, *exp);
exp++;
break;
default:
while (*exp >= '0'&&*exp <= '9')
{
postexp[i++] = *exp;
exp++;
}
postexp[i++] = '#';
}
}
while (!StackEmpty(Optr))
{
Pop(Optr, e);
postexp[i++]=e;
}
postexp[i] = '\0';
DestroyStack(Optr);
}
int main()
{
char exp[] = "(56-20)/(4+2)";
char postexp[20];
trans(exp, postexp);
printf("%s\n", postexp);
system("pause");
return 0;
}