求大佬,来自一个编程渣的求助!!!能不能帮忙写下下面代码的伪代码,下面的代码也是抄别人的,快哭了

2019-09-01 23:37   回答:2
  • guest
已解决 悬赏分:0 - 解决时间 2019-09-01 23:37

#include <iostream>

#include <assert.h>

#include <string>

using namespace std;

int check(char c1,char c2);

double sum(char c,double d1,double d2);

template <class Type>

class Number

{

public:

Number(size_t sz=INIT_SZ);

~Number();

public:

bool Push(const Type &x);       

bool Pop();

void GetTop(Type &x);

bool empty()const;

bool full()const;

int length()const;

    void clear();

void destory();

void show()const;

void quit_system(Type &x);

private:

enum{INIT_SZ=64};

Type *base;

int capacity;

int top;

};

template<class Type>

Number<Type>::Number(size_t sz=INIT_SZ)

{

capacity=sz>INIT_SZ?sz:INIT_SZ;

base=new Type[capacity];

assert(base!=NULL);

top=0;

}

template<class Type>

Number<Type>::~Number()

{

destory();

}

template<class Type>

bool Number<Type>::Push(const Type &x)

{

if(full())

{

cout<<"The stack is full."<<endl;

return false;

}

else

{

base[top]=x;

top++;

return true;

}

}

template<class Type>

bool Number<Type>::Pop()

{

if(empty())

{

cout<<" mistake !"<<endl;

return false;

}

else

{

top--;

return true;

}

}

template<class Type>

void Number<Type>::GetTop(Type &x)

{

x=base[top-1];

}

template<class Type>

bool Number<Type>::empty()const

{

return (top==0);

}

template<class Type>

bool Number<Type>::full()const

{

return (top>=capacity);

}

template<class Type>

int Number<Type>::length()const

{

return top;

}

template<class Type>

void Number<Type>::clear()

{

top=0;

}

template<class Type>

void Number<Type>::destory()

{

delete[]base;

base=NULL;

capacity=top=0;

}

template<class Type>

void Number<Type>::show()const

{

if(top==0)

{

cout<<"the stack is empty!"<<endl;

return;

}

for(int i=top-1;i>=0;--i)

{

cout<<base[i]<<endl;

}

}

template<class Type>

void Number<Type>::quit_system(Type &x)

{

x=0;

}

int check(char c1,char c2)

{

int a1,a2;

if(c1=='+'||c1=='-')

a1=3;

if(c1=='*'||c1=='/')

a1=5;

if(c1=='(')

a1=1;

if(c1==')')

a1=7;

if(c1=='#')

a1=0;

if(c2=='+'||c2=='-')

a2=2;

if(c2=='*'||c2=='/')

a2=4;

if(c2=='(')

a2=6;

if(c2==')')

a2=1;

if(c2=='#')

a2=0;

if(a1>a2)

return 1;

if(a1==a2)

return 0;

else 

return -1;

}

double sum(char c,double d1,double d2)

{

switch(c)

{

case '+':

return (d1+d2);

break;

case '-':

return (d1-d2);

break;

case '*':

return (d1*d2);

break;

case '/':

return (d1/d2);

break;

default:

break;

}

return c;

}

int main()

{

char *op="+-*/()#";

string str;

cin>>str;

    str.append(1,'#');

Number<char> OPTR;

Number<double> OPND;

int a=-1;

OPTR.Push('#');

while(true)

{

int b=a+1;

a=str.find_first_of(op,a+1);

if(a==string::npos)

break;

if(a!=b)

{

string ss(str,b,a-b);

double d=atof(ss.c_str());

OPND.Push(d);

}

char val;

OPTR.GetTop(val);

int che=check(val,str[a]);

if(-1==che)

{

OPTR.Push(str[a]);

}

if(0==che)

{

OPTR.Pop();

}

if(1==che)

{

char val;

OPTR.GetTop(val);

double d1;

OPND.GetTop(d1);

OPND.Pop();

double d2;

OPND.GetTop(d2);

OPND.Pop();

d1=sum(val,d2,d1);

OPND.Push(d1);

OPTR.Pop();

a--;

}

}

double s;

OPND.GetTop(s);

cout<<s<<endl;

return 0;

}


2019-09-01 23:37   回答:2 支持(23)  |   反对(0)  |   举报
  • guest

C++的代码的,这是要实现二叉树功能吧,满意请采纳

举报 2020-09-29 03:20

这个抄了也没有用

  • 大家都在看