📄 bdszh.txt
字号:
偶写的一个将任意精度的中序表达式转化成后序表达式并求值的程序
前些时间,偶写了个将中序表达式转化成后序表达式的程序,不过只能对单字符进行操作,现在改良了一下,能够对任意精度的数值进行运算,并且能够处理任意多的括弧(不过我并没有显式的允许输入[]或者{},只要将它们都成()就可以实现[]或者是{}的操作了),由于程序中间有小数点,所以在写成后序的时候,为了以便于区分输入的数据,我用下划线将它们隔离了开来。
由于时间的关系,这个程序还有很多待改进的地方,例如:本程序不支持负数的运算,不能够报错,因此我正在努力的实现上述的功能,还在考虑它的容错功能,例如:计算3+5的时候,我们不小心多输入了几个+号,我们也能够得到我们所期望的数值8,此外也有考虑用二叉树实现此运算的功能等等,总之,诸多不善之处还望大家海涵!
-------偶的QQ:37170732 邮箱:owenstone@sina.com.cn
大家有什么意见不妨和我交流一下。
------------------------------------下面是程序代码部分-----------------------------------------
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define NumberType double
#define NULL 0
#define DataType char
typedef struct Node *PNode;
typedef struct LinkList *PLinkList;
typedef struct LinkStack *PLinkStack;
struct Node
{
DataType info;
PNode link;
};
struct LinkStack
{ PNode base;
PNode top;
};
struct LinkList
{ PNode base;
PNode top;
};
PLinkList Create_LinkListPointer(void)
{PLinkList pllist;
pllist=(PLinkList)malloc(sizeof(struct
LinkList));
if(pllist==NULL)
pllist=(PLinkList)realloc(sizeof(struct
LinkList));
else pllist->top=pllist->base=NULL;
return (pllist);
}
PLinkList Create_LinkList(PLinkList pllist)
{pllist->top=(PNode)malloc(sizeof(struct Node));
if(pllist->top==NULL)
pllist->top=(PNode)realloc(sizeof(struct Node));
else {pllist->base=pllist->top;
pllist->base->link=pllist->top->link=NULL;
}
return (pllist);
}
PLinkList Create_LinkListNode(PLinkList pllist)
{pllist->top->link=(PNode)malloc(sizeof(struct
Node));
if(pllist->top->link==NULL)
pllist->top->link=(PNode)realloc(sizeof(struct
Node));
else{ pllist->top=pllist->top->link;
pllist->top->link=NULL;
}
return(pllist);
}
PLinkStack Create_LinkStackPointer(void)
{PLinkStack plstack;
plstack=(PLinkStack)malloc(sizeof(struct
LinkStack));
if(plstack==NULL)
plstack=(PLinkStack)realloc(sizeof(struct
LinkStack));
else plstack->top=plstack->base=NULL;
return (plstack);
}
PLinkStack Create_LinkStack(PLinkStack plstack)
{plstack->top=(PNode)malloc(sizeof(struct Node));
if(plstack->top==NULL)
plstack->top=(PNode)realloc(sizeof(struct Node));
else {plstack->base=plstack->top;
plstack->top->link=plstack->base->link=NULL;
}
return(plstack);
}
PLinkStack Create_LinkStackNode(PLinkStack
plstack)
{plstack->top->link=(PNode)malloc(sizeof(struct
Node));
if(plstack->top->link==NULL)
plstack->top->link=(PNode)malloc(sizeof(struct
Node));
else{plstack->top=plstack->top->link;
plstack->top->link=NULL;
}
return(plstack);
}
PLinkStack push_stack(PLinkStack plstack,DataType
i)
{plstack->top->link=(PNode)malloc(sizeof(struct
Node));
if(plstack->top->link==NULL)
plstack->top->link=(PNode)realloc(sizeof(struct
Node));
else {plstack->top=plstack->top->link;
plstack->top->link=NULL;
plstack->top->info=i;
}
return (plstack);
}
PLinkStack pop_stack_all(PLinkList
pllist,PLinkStack plstack)
{PNode p;
while(plstack->top!=plstack->base){
p=plstack->base;
while(p->link!=plstack->top) p=p->link;
Create_LinkListNode(pllist);
pllist->top->info=plstack->top->info;
plstack->top=plstack->top->link;
plstack->top=p;
}
return (plstack);
}
PLinkList print_llist(PLinkList pllist)
{PNode temp;
temp=pllist->base;
while(temp!=pllist->top){
printf("%c",temp->link->info);
temp=temp->link;
}
printf("\n");
return (pllist);
}
int bracket_included(PLinkStack plstack)
{PNode p,q;
q=p=plstack->base;
while(p!=plstack->top)
{if( p->link->info=='(' || p->link->info==')')
q=p->link;
p=p->link;
}
if(q->info=='(' || q->info ==')') return (1);
else return (0);
}
int islower_included(PLinkStack plstack)
{PNode p,q;
q=p=plstack->base;
while(p!=plstack->top){
if(p->link->info=='+' || p->link->info=='-' )
q=p->link;
p=p->link;
}
if(q!=plstack->base &&(q->info=='+' || q->info
=='-')) return (1);
else return (0);
}
int bracket_included_and_lower(PLinkStack plstack)
{PNode p,q;
p=plstack->base ;
while(p!=plstack->top){
if(p->link->info==')' ) q=p->link;
p=p->link;
}
p=q;
while(p!=plstack->top){
if(p->link->info=='+' || p->link->info=='-')
q=p->link;
p=p->link;
}
if(q->info=='+' || q->info=='-') return (1);
else return (0);
}
PLinkList push_LinkList(PLinkList pllist,DataType
i)
{
Create_LinkListNode(pllist);
pllist->top->info=i;
return(pllist);
}
PLinkList push_underline(PLinkList pllist)
{Create_LinkListNode(pllist);
pllist->top->info='_';
return (pllist);
}
PLinkStack pop_stack_until_bracket(PLinkList
pllist,PLinkStack plstack)
{PNode p,q;
p=plstack->base;
while(p!=plstack->top){
if(p->link->info=='(') q=p->link;
p=p->link;
}
p=q;
while(plstack->top!=p){
q=plstack->base;
while(q->link!=plstack->top) q=q->link;
Create_LinkListNode(pllist);
pllist->top->info=plstack->top->info;
plstack->top=plstack->top->link;
plstack->top=q;
}
return (plstack);
}
PLinkStack pop_until_lower(PLinkList
pllist,PLinkStack plstack)
{PNode p,q;
p=plstack->base;
while(p!=plstack->top){
if(p->link->info=='+' || p->link->info=='-')
q=p->link;
p=p->link;
}
p=q;
while(plstack->top!=p){
q=plstack->base;
while(q->link!=plstack->top) q=q->link;
Create_LinkListNode(pllist);
pllist->top->info=plstack->top->info;
plstack->top=plstack->top->link;
plstack->top=q;
}
return (plstack);
}
PLinkStack pop_stack_until_bracket_lower(PLinkList
pllist,PLinkStack plstack)
{PNode p,q;
p=plstack->base;
while(p->info!='(') p=p->link;
q=p;
while(plstack->top!=q){
p=q;
while(q->link!=plstack->top) q=q->link;
Create_LinkListNode(pllist);
pllist->top->info=plstack->top->info;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -