数据结构逆波兰算法C语言,后缀表达式 逆波兰式 栈 C语言 C++ 数据结构 链表 课程设计(国外英文资料).doc...

后缀表达式逆波兰式栈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);

}

如果(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值