栈-逆波兰表达式
学习了栈后写了一个简单的求逆波兰表达式
下面代码放上
这是头文件
#pragma once
#ifndef STACK_H__
#define STACK_H__
#include<iostream>
#include<string>
using namespace std;
#define MAXSIZE 10
typedef int SElemType;
//定义栈结构体
typedef struct
{
SElemType data[MAXSIZE];
int top;
}SqStack;
//
typedef struct
{
SElemType data[MAXSIZE];
int top1;//栈1指针
int top2;//栈2指针
}SqDoubleStack;
//初始化栈
void InitStack(SqStack * S);
//压栈
int Push(SqStack *S, int e);
//出栈
int Pop(SqStack *S, int &e);
//栈长度
int StackLength(SqStack S);
//销毁栈
void DestoryStack(SqStack *S);
//SqDoubleStack
//初始化栈
void InitStack(SqDoubleStack * S);
//压栈
int Push(SqDoubleStack *S, int e,int stackNumber);
//出栈
int Pop(SqDoubleStack *S, int &e,int stackNumber);
//栈长度
int StackLength(SqDoubleStack S);
#endif // !STACK_H__
这是头文件的实现
#include"stack.h"
//初始化栈
void InitStack(SqStack * S)
{
S->top = -1;
}
//压栈
int Push(SqStack *S, int e)
{
//栈已经存在
//栈未满
if (MAXSIZE == S->top + 1)
{
return 0;
}
S->top++;
S->data[S->top] = e;
return 1;//ok
}
//出栈
int Pop(SqStack *S, int &e)
{
//栈已经存在
//栈不为空
if (-1 == S->top)
{
return 0;
}
e = S->data[S->top];
S->top--;
return 1;//OK
}
//栈长度
int StackLength(SqStack S)
{
return S.top + 1;
}
//销毁栈
void DestoryStack(SqStack *S)
{
}
main函数
#include<iostream>
#include"stack.h"
using namespace std;
void test3()
{
LinkStack s;
char ch;
InitStack(&s);
int e1,e2;
int rs;
cout << "以#结束\n";
cin >> ch;
while (ch != '#')
{
if(ch>='0'&&ch<='9')
Push(&s, ch-'0');
else
{
Pop(&s, e1);
Pop(&s, e2);
switch (ch)
{
case '+':
Push(&s, e1 + e2);
break;
case '-':
Push(&s, e1 - e2);
break;
case '*':
Push(&s, e1 * e2);
break;
case '/':
Push(&s, e1 / e2);
break;
}
}
cin >> ch;
}
cout << "结束!\n";
Pop(&s, rs);
cout <<"结果:"<< rs << endl;
}
int main()
{
//逆波兰
test3();
cout << "结束\n";
return 0;
}