第一步
定义链栈
typedef struct Snode{
int data;
struct Snode *next;
}Snode , *LinkStack;第二步
初始化栈
bool InitStack(LinkStack &s){
s = NULL;
return true;
}第三步
判断是否为空
bool Empty(LinkStack s){
if(s == NULL) return true;
return false;
}第四步
入栈
bool Push(LinkStack &s , int e){
LinkStack p = new Snode;
p -> data = e;
p -> next = s;
s = p;
return true;
}第五部
出栈
//出栈
bool Pop(LinkStack &s , int &e){
if(Empty(s)) return false;
e = s->data;
LinkStack p = s;
s = s->next;
delete p;
return true;
}第六步
取栈顶元素
int GetTop(LinkStack s){
if(Empty(s)) return false;
return s->data;
}第七步
抄完书了,开始写
int main()
{
LinkStack s; //定义链栈
InitStack(s); // 初始化链栈
string a; //定义字符串 a 这里是c++的用法,为什么我非要用c++呢,
// 当然是想让你们自己写啦,哈哈,这里等价于 char a[100];
cin>>a; // 输入字符串a
reverse(a.begin(), a.end()); //c++内置函数,包含在#include<algorithm>头文件,反转字符串,知道大家没学过,哈哈,自己尝试写写这个函数吧
int t = 0,t1 = 0; // 定义两个临时变量,下边要用
for(int i = 0 ;i < a.length() ;i++){ //a.length(),c++内置函数,大家自己写写,或者,你去网上熟练的搜下它怎么用。
if(a[i] >= '0' && a[i] <= '9') Push(s,a[i]-'0');
//如果输入的前缀表达式,是数字的话,就把这个字符所对应的数字,放入栈里
//比如 0 = ‘0’-‘0’ 1 = ‘1’ - ‘0’ ;
else { //如果是运算符,就从栈里拿出两个元素进行运算
if(!Empty(s)) Pop(s, t);
if(!Empty(s)) Pop(s, t1);
int sum = 0;
switch (a[i]) {
case '+':
sum = t + t1;
break;
case '-':
sum = t - t1;
break;
case '*':
sum = t * t1;
break;
case '/':
sum = t / t1;
break;
default:
break;
}
Push(s, sum); //把运算后的结果放进栈中
}
}
//最后当循环结束的时候,大家会发现,栈中只有一个元素,就是我们输入的前缀表达式的值
cout << GetTop(s)<<"\n"; //输出结果,over
return 0;
}完整代码
//
// main.cpp
// 数据结构3
//
// Created by 宋玉良 on 2020/10/29.
//
#include<bits/stdc++.h>
using namespace std;
typedef struct Snode{
int data;
struct Snode *next;
}Snode , *LinkStack;
//初始化
bool InitStack(LinkStack &s){
s = NULL;
return true;
}
//判断是否为空
bool Empty(LinkStack s){
if(s == NULL) return true;
return false;
}
//入栈
bool Push(LinkStack &s , int e){
LinkStack p = new Snode;
p -> data = e;
p -> next = s;
s = p;
return true;
}
//出栈
bool Pop(LinkStack &s , int &e){
if(Empty(s)) return false;
e = s->data;
LinkStack p = s;
s = s->next;
delete p;
return true;
}
//取栈顶元素
int GetTop(LinkStack s){
if(Empty(s)) return false;
return s->data;
}
int main()
{
LinkStack s;
InitStack(s);
string a;
cin>>a;
reverse(a.begin(), a.end());
int t = 0,t1 = 0;
for(int i = 0 ;i < a.length() ;i++){
if(a[i] >= '0' && a[i] <= '9') Push(s,a[i]-'0');
else {
if(!Empty(s)) Pop(s, t);
if(!Empty(s)) Pop(s, t1);
int sum = 0;
switch (a[i]) {
case '+':
sum = t + t1;
break;
case '-':
sum = t - t1;
break;
case '*':
sum = t * t1;
break;
case '/':
sum = t / t1;
break;
default:
break;
}
Push(s, sum);
}
}
cout << GetTop(s)<<"\n";
return 0;
}

京公网安备 11010502036488号