问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

数据结构 进栈 出栈 C

发布网友 发布时间:2022-05-16 01:59

我来回答

1个回答

热心网友 时间:2023-10-08 23:05

// Expssion1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream.h>
#include "stdio.h" /*C语言头文件*/
#include "string.h"
#include "ctype.h"
#include "math.h"
#include "malloc.h"
#include "process.h"
#define N 100
#define OK 1
#define Error 0
double result;
char ch[N];
typedef enum
{Empty=2,Lbrace=3,Rbrace=4,
Plus=5,Minus=6, Divide=7,
Times=8,End=9} Operator;
typedef struct op_stack{
double *base;
double *top;
double stacklength;
}O_stack;
typedef struct Num_stack{
double *base;
double *top;
double stacklength;
}N_stack;
N_stack L;
O_stack L1;
void initstack1(O_stack &L1)
{ L1.stacklength=0;
L1.base=(double *)calloc(N/2+1,sizeof(double));
if(!L1.base) {printf("no memery!"); exit (0); }
L1.top=L1.base;
cout<<"chu shi hua O"<<endl; return;
}
void initstack(N_stack &L)
{ L.stacklength=0;
L.base=(double *)calloc(N/2,sizeof(double));
if(!L.base) { printf("no memery!"); exit(0); }
L.top=L.base;
cout<<"chu shi hua N"<<endl; return;
}
int push_num(N_stack &L,double num)
{
cout<<"push num"<<endl;
if(L.top-L.base>=L.stacklength)
{
L.base=(double*)calloc(N/2,sizeof(double));
if(!L.base)exit(OVERFLOW);
L.top=L.base+N/2;
L.stacklength+=N/2;

}
*L.top++=num; cout<<num<<"yi jin ya ru"<<endl;
return OK;
}
int pop_num(N_stack &L)
{
int e;
cout<<"pop num"<<endl;
if(L.top==L.base) return Error;
e=*--L.top;
cout<<e<<endl;
return e;
}
int push_opnd(O_stack &L1,int operate)
{
cout<<"push opnd"<<endl;
if(L1.top-L1.base>=L1.stacklength)
{
L1.base=(double*)calloc(N/2,sizeof(double));
if(!L1.base)exit(OVERFLOW);
L1.top=L.base + N/2;
L1.stacklength+=N/2+1;
}
*L1.top++=operate;
cout<<operate<<endl;
return OK;
}
int pop_opnd(O_stack L1)
{ cout<<"pop opnd"<<endl;
int e;
if(L1.top==L1.base) return Error;
e=*--L1.top;
cout<<e<<endl;
return e;
}
double caculate(int cur_opnd)
{ double num1,num2;
num1=pop_num(L);
num2=pop_num(L);cout<<"da"<<num1<<" "<<num2<<endl;
if(L1.base>=L1.top)
return Error;
//cur_opnd=pop_opnd(L1);
cout<<"dasd"<<cur_opnd<<endl;
switch(cur_opnd){
case Plus:
result=num1+num2;//pop_opnd() ;
break;
case Minus:
result=num2-num1;//pop_opnd() ;
break;
case Divide:
result=num2/num1;//pop_opnd() ;
break;
case Times:
result=num1*num2;//pop_opnd() ;
break;
default:
return Error;
} push_num(L,result);//为什么呀不进去呢?
cout<<result<<endl;
return OK;
}
int change_opnd(int op) { /*将字符串转换成对应的数字*/

switch(op) {
case '+': op=Plus; /*处理加号*/
break;
case '-': op=Minus; /*处理减号*/
break;
case '*': op=Times; /*处理乘号*/
break;
case '/': op=Divide; /*处理除号*/
break ;
case '(': /*处理左括号*/
op=Lbrace;
break;
case ')': /*处理右括号*/
op=Rbrace;
break;
case '#': /*处理结束符*/
op=End;
break;
}
return op;
}
int Make_str() { /*语法检查,并计算表达式的值*/
int i=0,j=0,dot=0;
cout<<"jiru"<<endl;
gets(ch);
char str_num[32];
char s;

while(ch[i]!='\0'){ /*若字符串没有结束,则继续循环*/
cout<<"pan zi fu"<<endl;
if(isdigit(ch[i])){ /*若是数字,则进行数字处理*/
while(isdigit(ch[i])){ /*取连续的数字*/
str_num[j]=ch[i];
i++; j++;
cout<<"msdn"<<endl;
if(ch[i]=='.'){ /*数字后是小数点*/
str_num[j]=ch[i]; /*计算小数点个数*/
i++; j++; dot++;
}
if(dot>1) /*若小数点个数大于1,则出错*/
return Error;
}
str_num[j]='\0'; /*在字符串数字后加\0*/
push_num(L,atof(str_num)); /* 将该数字压入数字堆栈*/
cout<<"ya ru zi fu"<<endl;
j=0; /*计数器复零*/
dot=0;
i--;
}
else if(ch[i]=='(' || ch[i]=='+' || ch[i]=='-' || ch[i] == '*'|| ch[i]=='/' || ch[i]==')' || ch[i]=='#'){
s=change_opnd(ch[i]);
push_opnd(L1,s);
} /*若是规定的运算符,则转换成数字,并压入堆栈并判断*/

else /*若是其它的字符,则为非法*/
return Error;
i++; /*继续判断下一个字符*/
}
return OK;
}

main() {
initstack(L);
initstack1( L1);
int s;
printf("Please input a expression:\n");
Make_str();/*判断合法性,并计算结果*/
while(L1.base!=L1.top)
{
s=pop_opnd(L1);
caculate(s);}
cout<<"fan hui";
printf("results of this expression=%f\n",result);
/*正确时输出结果*/
return OK;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么时间试排卵纸最佳 排卵第十天排卵试纸弱阳怎么回事 手机app下载课后帮 课后帮点击了家长怎么改成学生的 课后帮绑定学生后还能绑定家长吗 课后帮怎么注册 课后帮注册教程 癫痫急救的正确方法 癫痫持续状态的抢救要点 小儿癫痫发作的急救措施 癫痫病急救常识有哪些要点 文正教务绝对是SB!对吗? 苏大文正学生如何进入苏州大学网上图书馆 西安地铁偷工减料是怎么回事? 地铁的优缺点+英文 中国移动网上发布的大学专业分数可信吗 哈尔滨地铁1号线的地铁车体 中车hcm密码怎么改 中国移动网上大学如何学够时长 焦作市新华书店有注册安全工程师考试教材吗 中国移动网上大学 阳泉哪个书店卖注册安全工程师教材 美信微信商城系统支持多用户入驻吗? 商丘师范学院艺术类历年文化课低分数线是多少 商丘的编导培训班那个靠谱点? 商丘师范学院艺术类历年录取分数线 商丘师范学院艺术类分数线专业打223分,文化课估分在230分左右,可以去么? 关于河南商丘师范学院 日本留学,求在公司开具的纳税证明的范本!谢谢! 想问一下大家在河南商丘都去哪里学画画呢? 年度纳税证明 苏州大学文正学院工资怎么样 我有一个数据结构(C语言版)程序题,关于模拟停车场管理的,不知道哪错了? 数据结构 多位浮点型表达式求值(转换为后缀表达式) 数据结构 复杂表达式求值(带函数) c语言 计算5*7+((5+9)&#47;2+3).怎样写代码,才能让计算机先算5+9 (假设计算机不知道运算的优先级) 广东、云南等12个省份,均已发现红火蚁入侵,红火蚁入侵会带来哪些影响? 红火蚁入侵四川6市州, 红火蚁有什么危害? 有哪位编程高手能够帮 我用C语言写一个关于算术表达式求值的程序。(用数据结构中的栈知识) 怎么样做拆媒气罐班子 称号和除号有什么区别? 露水夫妻的电影 什么是一路人?什么不是一路人? 求电影学会三周年对联 男人与女人最舒服的关系是什么样 求一片名叫露水夫妇的电影下载网址 找一些和奥运或者动作有关的 IQ题 歇后语或谜语 怎么样让OPPO手机能放烟花? oppoA8手机怎么放烟花? 手机上哪可以下载白事大全 上海大年初五接财神烧香去哪里