后缀表达式逆波兰式栈C语言C数据结构链表课程设计(国外英文资料)
后缀表达式 逆波兰式 栈 C语言 C++ 数据结构 链表 课程设计(国外英文资料)
#包括< stdio. h >
#包括<
#包括<
#包括<
#包括。H
无效的后缀(中缀表达式字符串);
#定义尺寸100
typedef struct {
字符数据[大小];
栈的顶部;
}栈;
typedef struct {
前、后整数;
字符数据[大小];
}队列;
/ ***********栈的功能实现********************* /
初始化栈/ * * /
无效init_stack(堆栈的)
{
顶部= 0;
}
测试栈是否为空/ * * /
国际empty_stack(堆栈的)
{
返回(顶部= 0);
}
测试栈是否已满/ * * /
国际full_stack(堆栈的)
{
返回(顶部= =大小);
}
压栈/ * * /
虚推(堆栈,字符x)
{
如果(full_stack(S))
{
printf(“栈溢出\n”);
}
其他的
{
s;
+(顶部);
}
}
出栈/ * * /
字符弹出(堆栈)
{
如果(empty_stack(S))
{
printf(“栈是空的\n”);
}
其他的
{
——(顶部);
“返回数据”顶部;
}
返回0;
}
/ ***************队列的功能实现********************** /
初始化队列/ * * /
虚空INITQ(队列* q)
{
q =计数= 0;
q =前面= 0;
q =后置= 1;
}
测试队列是否为空/ * * /
国际emptyq(队列* q)
{
返回(q =计数= 0);
}
测试队列是否已满/ * * /
国际fullq(队列* q)
{
返回(q =计数=大小);
}
向队列插入一个元素/ * * /
无效insertq(char,队列* q)
{
如果(fullq(Q))
{
printf(“队列溢出\n”);
}
其他的
{
q =后置(q +后置+ 1)%大小;
q;
q +计数+;
}
}
移除一个元素并讲它的值返回/ * * /
焦removeq(队列* q)
{
字符Y;
如果(emptyq(Q))
{
printf(“队列是空的\n”);
}
其他的
{
y =数据[ q -前面];
q =前面(q +前面+ 1)%大小;
(q计数);
回到Y;
}
返回0;
}
/ ***********主函数**************** /
主(空)
{
字符检查装置[ ] =“A + B(C / D-E)×F-G”;输出示例/ * * /
字符输入[大小];
printf(“例子\n输入:\n%s \n输出:\n”,检查装置);
后缀(检查装置);
(1)
{
printf(“\n任意键开始输入,按ESC退出…\n”);
如果(getch() = = 27)
返回0;
printf(“\n请输入中缀表达式:”);/*提示输入*/
scanf(“%s”,输入);
后缀(输入);
}
getch();/ * * /按任意键继续
返回0;
}
国际is_number(ch)
{
如果(CH > = 'a'和CH < = Z | | CH > = 'a'和CH < = Z | | CH > = '0'和CH < = 9)
返回1;
返回0;
}
转后缀表达式函数/ * * /
无效的后缀(中缀表达式字符串)
{
队列Q;
堆栈的;
int = i 0;
字符,温度;
优先数[ 256 ];/ * * /为每个ASCII码预定义优先级
INITQ(Q);/ * * /初始化栈和队列
init_stack(S);
推(s,\ 0);
优先[×] = 3;优先[ / ] = 3;/*初始化优先级*/
优先级“+”= 2;优先级“=”= 2;
优先级[(= = 1;优先级[ ] ] ] = 1;
优先级“$”= 0;
做{
CH =中缀[我+ ];
如果(is_number(CH))/ * * /如果是大写字母
{
insertq(CH,和Q);/ * * /插入队列
}
如果(CH = = ')')/ * * /如果是右括号
{
温度=流行(的);弹出左括号前的所有运算符/ * * /
而(临时)!=“()
{
insertq(温度,和Q);/ * * /把弹出的运算符插入队列
温度(POP);
}
}
如果(CH = =‘0’)/ * * /如果是结束符
{
而(!empty_stack(s))
{
温度(POP);
insertq(温度,和Q);/ * * /把栈内剩余的运算符插入队列
}
}
如果(CH = = '(')/ * * /如果是左括号
{
推(s,CH);
}
如果(