栈的简单应用.doc_第1页
栈的简单应用.doc_第2页
栈的简单应用.doc_第3页
栈的简单应用.doc_第4页
栈的简单应用.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/头文件“stack.h”#ifndef STACK_H #define STACK_H template class Nodepublic:Node();Node(const Type& date);Node();/private:Type Date;Node *Next;template class Stackpublic:Stack();/Head-Date不可知Stack();void Puah_Head(const Node& node);void Pop_Head();Type& Top();void MakeEmpty();void Travel();bool IsEmpty();/private:Node *Head;template Stack:Stack()Head=new Node;templatevoid Stack:MakeEmpty()Node *cur=Head;for(;Head-Next!=NULL;) cur=Head-Next;Head-Next=cur-Next;delete cur;template Stack:Stack()if(Head-Next!=NULL) MakeEmpty();delete Head;template void Stack:Puah_Head(const Node& node) Node* cur=new Node(node); if(Head-Next!=NULL) cur-Next=Head-Next; Head-Next=cur;template void Stack:Pop_Head()Node* cur=new Node;if(Head-Next=NULL) return;cur=Head-Next;Head-Next=cur-Next;delete cur;template Type& Stack:Top() if(Head-Next=NULL) coutStack为空Date;return Head-Next-Date;template void Stack:Travel()Node* cur=new Node;cur=Head;for(;cur-Next!=NULL;)cur=cur-Next;coutDateendl;template bool Stack:IsEmpty()if(Head-Next=NULL) return true;return false;template Node:Node():Next(NULL) ;template Node:Node(const Type& date):Date(date),Next(NULL) ;template Node:Node() ;#endif/主程序cpp文件“main.cpp”#include#include#include string#includestack.husing namespace std;char* Change(int number,int a);/把number转换为a进制的一个数; string PostFix(string exp);/把一个中缀改为后缀;int FindNumber(char a);/把字符转换为数字int Post(string postfixexp);/计算后缀表达式char* n;int ShuRu(string ,int& i);/从第i个字符开始,将其到空格之前的所有字符换算成intvoid main() /字符串格式 每个操作数或者操作符号后面加一个空格,最后一个操作符号可以不加/数据为intstring a=3424 665 + 542 / 85 * 544 - 7655 +;int b=Post(a);couta的计算结果为bendl;/*char* a=Change(15,16); /15转化为16进制coutaendl;*/*string infixexp; /中缀转换为后缀,输入eof停止cout连续输入直到输入eof,即ctrl+zendl;cout操作符仅限 ( + - * / )infixexp;) coutPostfix expression isPostFix(infixexp)endl; */int Post(string postfixexp) postfixexp.append(2, ); Stack* NumberStack=new Stack; int i=0; int number; int first; int last; for(;postfixexpi!=32;) int ch; ch=FindNumber(postfixexpi); switch(ch) case 0:number=ShuRu(postfixexp,i);NumberStack-Puah_Head(number);break;case 2:first=NumberStack-Top();NumberStack-Pop_Head();last=NumberStack-Top();NumberStack-Pop_Head();number=first+last;NumberStack-Puah_Head(number);i+;break;case 3:first=NumberStack-Top();NumberStack-Pop_Head();last=NumberStack-Top();NumberStack-Pop_Head();number=last-first;NumberStack-Puah_Head(number);i+;break;case 4:first=NumberStack-Top();NumberStack-Pop_Head();last=NumberStack-Top();NumberStack-Pop_Head();number=first*last;NumberStack-Puah_Head(number);i+;break;case 5:first=NumberStack-Top();NumberStack-Pop_Head();last=NumberStack-Top();NumberStack-Pop_Head();number=last/first;NumberStack-Puah_Head(number);i+;break; i+; number=NumberStack-Top();return number;int ShuRu(string a,int&i)int b10;int num=0;int k=0;int jie=1;for(;ai!=32;i+,k+) bk=ai-48; jie=jie*10;bk=10;for(int j=0;bj10;j+) num=num+bj*jie/10; jie=jie/10; return num;int FindNumber(char a)if(a=() return 1;if(a=+) return 2;if(a=-) return 3;if(a=*) return 4;if(a=/) return 5;if(a=) return 6;return 0;char* Change(int number,int a)Stack* m=new Stack;int zheng=1;n=new char100;char jinzhi=0123456789ABCDEF;/coutnumber转换为aPuah_Head(jinzhinumber%a);for(zheng=0;m-Head-Next!=NULL;zheng+)nzheng=(*m).Top();m-Pop_Head(); nzheng=0; return n;string PostFix(string exp) bool flag=true; int TokenNumber,TopTokenNumber; Stack* OpStack=new Stack; string PostFixExp; string Op=0(+-*/); string Blank= ; int j=exp.length(); if(FindNumber(exp0)1) flag=false; for(int i=0;iPuah_Head(expi);break;case 6: for(;) if(OpStack-IsEmpty() flag=false; break;TopTokenNumber=FindNumber(OpStack-Top();OpStack-Pop_Head();if(TopTokenNumber=1) break;PostFixExp.append(Blank+OpTopTokenNumber); break;case 2:case 3:case 4:case 5:for(;) if(i1) flag=false; break; if(OpStack-IsEmpty()|(TokenNumber/2)(FindNumber(OpStack-Top()/2) OpStack-Puah_Head(OpTokenNumber); break; else TopTokenNumber=FindNumber(OpStack-Top(); OpStack-Pop_Head(); PostFixExp.append(Blank+OpTopTokenNumber); break;case 0:PostFixExp.append(Blank+expi);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论