#include <iostream>
#include <string>
using namespace std;
#define MAXSIZE 20
class 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;
}
c++ 顺序栈+链栈
最新推荐文章于 2021-08-27 20:33:00 发布