1. 程式人生 > >棧的鏈式儲存結構C++實現

棧的鏈式儲存結構C++實現

棧的鏈式儲存結構被稱為鏈棧(linked stack)

鏈棧在本質上是簡化後的單鏈表,所有操作只集中在連結串列的一端,模擬棧的出棧和壓棧等操作。一般選擇單鏈表的頭部來作為棧頂比較方便。

/*************************************************************************
    > File Name: LinkStack.cpp
    > Author: Shorey
    > Mail: [email protected]
    > Created Time: 2015年03月23日 星期一 09時47分07秒
 ************************************************************************/

#include<iostream>
using namespace std;
struct Node
{
	int data;
	Node *next;		
};

class LinkStack
{
	public:
		LinkStack()                           //建構函式
		{
			top=NULL;
		}
		~LinkStack();                         //解構函式
		void Push(int x);                     //  將x入棧
		int Pop();                           //彈出棧頂元素
		int GetTop()                         //獲取棧頂元素,但不刪除      
		{
			if(top!=NULL) return top->data;
		}
		bool Empty()                         //判斷棧是否為空
		{
			if(top==NULL)return 1;
			else         return 0;
		}
	private:
		Node *top;

};

LinkStack::~LinkStack()
{
	Node *p;
    while(top!=NULL)
	{
		p=top;
		top=top->next;
		delete p;
	}
}

void LinkStack::Push(int x)
{
	Node *s=new Node;
	s->data=x;
	s->next=top;
	top=s;
}
int LinkStack::Pop()
{
	Node *p;
	int x;
	if(top==NULL)cout<<"stack is empty"<<endl;
	else
	{
     x=top->data;
	 p=top;
	 top=p->next;
	 delete p;
	 return x;
	}
}

int main()
{	
	LinkStack s;
	s.Push(5);
	s.Push(6);
	s.Push(9);
	cout<<s.GetTop()<<endl;
	cout<<s.Pop()<<endl;
	cout<<s.GetTop()<<endl;
	return 0;
}