学生成绩管理系统 - 数据结构上机实验报告Yangtze(4)

2019-01-27 10:25

5. 栈的应用

#include #include

#define stack_init_size 500 //栈的存储结构 #define stackincrement 100 typedef struct Stack{ char *base; char *top;

int stacksize; }Stack;

void Push(Stack &S,char e); void Init(Stack &S);

void Destroy(Stack &S);

char GetTop(Stack S,char &e); char Pop(Stack &S, char &e);

char operation(Stack s1,Stack s2); int suanfu(char c);

char Precede(char x,char y);

char Operate(char x,char z,char y);

void Init(Stack &S) {

S.base=new char[500];

if(!S.base) abort(); S.top=S.base;

S.stacksize=stack_init_size; }

void Destroy(Stack &S) {

int i;

i=S.top-S.base; for(;i<0;i--)

{ delete --S.top; //删除的必须是指针 }

delete S.top; delete[] S.base; }

char GetTop(Stack S,char &e) {

if(S.top==S.base) abort(); e=*--S.top; return e; }

char Pop(Stack &S, char &e) {

if(S.top==S.base) abort(); e=*--S.top; return e; }

void Push(Stack &S,char e) {

if(S.top-S.base>=S.stacksize)// the stack is full filled { S.base=(char

*)realloc(S.base,(S.stacksize+stackincrement)*sizeof(char));

if(!S.base) abort(); S.top=S.stacksize+S.base; S.stacksize=S.stacksize+stackincrement; } *S.top++=e; }

int suanfu(char c) {

if(c=='*')return 1;

else if(c=='/')return 1; else if(c=='-')return 1; else if(c=='+')return 1; else if(c=='(')return 1;

else if(c==')')return 1; else if(c=='#')return 1;

else return 0; }

char Precede(char x,char y){ int i,j; int

form[7][7]={{1,1,-1,-1,-1,1,1},{1,1,-1,-1,-1,1,1},{1,1,1,1,-1,1,1},{1,1,1,1,-1,1,1},{-1,-1,-1,-1,-1,0,2},{1,1,1,1,2,1,1},{-1,-1,-1,-1,-1,2,0}};

switch(x){

case '+':i=0;break; case '-':i=1;break; case '*':i=2;break; case '/':i=3;break; case '(':i=4;break; case ')':i=5;break; case '#':i=6;break; }

switch(y){

case '+':j=0;break; case '-':j=1;break; case '*':j=2;break; case '/':j=3;break; case '(':j=4;break; case ')':j=5;break; case '#':j=6;break; }

if(form[i][j]==1) return '>';

else if(form[i][j]==-1) return '<'; else

return '='; }

char Operate(char x,char z,char y) {

int a=x-'0',b=y-'0';

switch(z){

case '+':return a+b; case '-':return a-b; case '*':return a*b; case '/':return a/b; } }

char operation(Stack s1,Stack s2) //s1 为运算符 栈;s2为 运算数栈;

{

Init(s1); Push(s1,'#');

Init(s2);

cout<<\请输入算式:\ char c; cin>>c;

char e; char l;char q;char u1; while(c!='#'||GetTop(s1,e)!='#') { if(!suanfu(c)) //判断是否为运算符 { Push(s2,c); cin>>c; } else

u1=Precede(GetTop(s1,l),c); switch(Precede(GetTop(s1,l),c)) {

case '<':{Push(s1,c);cin>>c;break;} case'=':{Pop(s1,q);cin>>c;break;} case'>':

{char v;char y,d; Pop(s1,v); Pop(s2,y); Pop(s2,d);

int a1=Operate(d,v,y); //知道了是在这里出现的错误。第一次计算出的值在存到s2里时,类型出了问题

//存储的时候在后面加了一个?,让出来的数字变了大小

Push(s2,a1+0x30);//整形变字符型 在整形数上加0x30就可以了

break;} } }

char r;

return GetTop(s2,r); }

void main() {

Stack s1,s2; int u;

u=operation(s1,s2); cout<<(char)u<

6. 实验结果


学生成绩管理系统 - 数据结构上机实验报告Yangtze(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:黑龙江虎林八五零农场学校人教七级上册英语教学案:unit-教学案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: