您的位置:首页 > 理论基础 > 数据结构算法

Stack数据结构的模板实现

2014-03-15 00:03 169 查看
上篇文章list忘了声明一点,此链表带有一个亚元节点(即不存放数据,只记录第一个链表节点位置的节点)。这次的这个Stack也是一个带有亚元节点的Stack。

 

这个实现基本上把Stack该有的基本的东西都实现了,比如说:判空,判满,出栈,入栈等等。后续还会有个人写的基本的数据结构的贴上来。

 

好了再次我就不多说了直接贴代码:

 

#include<exception>
#include<iostream>
using namespace std;

template <class T>
class Stack
{
public:
struct node{
T data;
node* next;
node(const T data = T()):data(data),next(NULL){}
};
Stack(int _max=0):max(_max),size(0){head = new node();}
virtual ~Stack();
void stackPush(const T&);
T stackPop();
bool stackEmpty();
bool stackFull();
void show();
void clear();
void setNode(node*,const T&);
int getSize()const { return size;}
private:
int size;
int max;
node* head;
};
template <class T>
void Stack<T>::clear()
{
node* p = head;
while(p->next!=NULL)
{
node* temp;
temp = p;
p = p->next;
--size;
delete temp;
}
}
template <class T>
Stack<T>::~Stack()
{
clear();
}
template <class T>
void Stack<T>::setNode(node* resultNode,const T& data)
{
node* no = new node();
if(no!=NULL){
no->data = data;
no->next = resultNode->next;
resultNode->next = no;
}
++size;
}
template <class T>
void Stack<T>::stackPush(const T& data)
{
if(stackFull())
{
throw "Stack is full !!";
}
if(head==NULL)
{
head = new node();
}
node* p = head;
setNode(p,data);
}
template <class T>
T Stack<T>::stackPop()
{
if(stackEmpty())
{
throw "Stack is empty !!";
}
T data = head->next->data;
node* p = head->next->next;
delete head->next;
head->next = p;
--size;
return data;
}
template <class T>
void Stack<T>::show()
{
node* p = head->next;
cout<<"Stack< ";
while(p!=NULL)
{
cout<<p->data<<' ';
p = p->next;
}
cout<<" > ";
cout<<endl;
}

template <class T>
bool Stack<T>::stackEmpty()
{
return (head->next)==NULL;
}

template <class T>
bool Stack<T>::stackFull()
{
return size==max;
}


代码不是很多,大家只需要拷出来加上main函数就可以运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: