c++ 顺序栈+链栈

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值