c++ 顺序栈+链栈

来源:互联网 发布:英语单词发音软件下载 编辑:程序博客网 时间:2024/06/05 14:15
#include <iostream>#include <string>using namespace std;#define MAXSIZE 20class Order_Stack{private:string Name[MAXSIZE+1];int Top;int End;public:Order_Stack(){memset(Name,0,sizeof(Name)/sizeof(string));Top = 0;//从一开始进栈End = 0;}//函数//压栈void Push(string name);//退栈string Pop();//判断栈是否为空bool Empty();//取栈顶元素string getTop();};void Order_Stack::Push(string name){if(Top <= MAXSIZE){Top = Top + 1;Name[Top] = name;}else{cout<<"溢出!"<<endl;}}string Order_Stack::Pop(){if(!Empty()){string x = Name[Top];Top = Top - 1;return x;}else{cout<<"空栈!"<<endl;return NULL;}}bool Order_Stack::Empty(){if(Top < 1){return true;}else{return false;}}string Order_Stack::getTop(){if(Top > 0){return Name[Top];}else{cout<<"栈空!"<<endl;}return NULL;}//以上为顺顺序栈//**********************************************class Link_Node{private:string Name;Link_Node* Next;public:Link_Node(){Next = NULL;}//link_node函数void SetName(string name);void SetNext(Link_Node* next);string GetName();Link_Node* GetNext();};void Link_Node::SetName(string name){this->Name = name;}void Link_Node::SetNext(Link_Node* next){this->Next = next;}string Link_Node::GetName(){return Name;}Link_Node* Link_Node::GetNext(){return Next;}class Link_Stack{private:Link_Node* Top;Link_Node* End;public:Link_Stack(){Top = End = new Link_Node();//初始化都指向栈底}//函数//压栈void Push(string name);//退栈string Pop();//判断栈是否为空bool Empty();//取栈顶元素string getTop();};void Link_Stack::Push(string name){Link_Node* temp = new Link_Node();temp->SetName(name);//设置数据项temp->SetNext(Top);//设置指针针Top = temp;//设置栈顶指针}string Link_Stack::Pop(){Link_Node* temp;temp = Top;Top = temp->GetNext();string x = temp->GetName();free(temp);return x;}bool Link_Stack::Empty(){if(Top == End){return true;}else{return false;}}string Link_Stack::getTop(){if(Top != End){return Top->GetName();}else{cout<<"栈空!"<<endl;return NULL;}}//以上为链栈//***********************************************int main(){string name;cout<<"**********顺序栈**********"<<endl;Order_Stack ostack;cout<<"请输入数据,以###结束输入:"<<endl;while(cin>>name,name != "###"){ostack.Push(name);}while(!ostack.Empty()){cout<<"当前栈顶元素为"<<ostack.getTop()<<endl;name = ostack.Pop();cout<<name<<endl;}cout<<"**********链栈**********"<<endl;Link_Stack lstack;cout<<"请输入数据,以###结束输入:"<<endl;while(cin>>name,name != "###"){lstack.Push(name);}while(!lstack.Empty()){cout<<"当前栈顶元素为"<<lstack.getTop()<<endl;name = lstack.Pop();cout<<name<<endl;}return 0;}

原创粉丝点击