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

数据结构之栈的链式存储7-(入栈,出栈等)

2015-09-14 14:40 417 查看
本次操作采用不带头结点的头插法,方便在栈顶进行入栈和出栈操作

代码如下

//栈只限于在末尾插入或者删除,建立头插法不带头结点方法较简单实现
#include <iostream>
#include <cstdlib>

using namespace std;

template<typename T>
struct Node{
T data;
Node<T> *next;
};

template<typename T>
class LinkStack{
private:
Node<T> *top; //栈顶指针
public:
LinkStack(){ top = NULL; } //构造空栈
~LinkStack();
void Push(T x); //元素入栈
T Pop(); //元素出栈
T GetTop(); //获取栈顶元素
bool StackEmpty(); //检测栈是否为空
int StackLength(); //测定栈长度
void StackTranverse(); //遍历栈中元素
};

//元素入栈(不检查栈满情况对比顺序存储结构)
template<typename T>
void LinkStack<T>::Push(T x)
{
Node<T> *s = NULL;
s = new Node<T>;
if (!s)
throw "内存分配失败 \n";
s->data = x;
s->next = top;
top = s; //成为新的栈顶指针
}

//元素出栈
template<typename T>
T LinkStack<T>::Pop()
{
if (!top) //无元素
throw "无元素 \n";
Node<T> *p = top;
T e = p ->data;
top = top->next;
delete p;

return e;
}

//获取栈顶元素
template<typename T>
T LinkStack<T>::GetTop()
{
return top->data;
}

//测定栈长度
template<typename T>
int LinkStack<T>::StackLength()
{
int cnt = 0;
Node<T> *p = top;
while (p)
{
cnt++;
p = p->next;
}
return cnt;
}

//检测栈是否为空
template<typename T>
bool LinkStack<T>::StackEmpty()
{
return StackLength() == 0;
}

//遍历栈中元素
template<typename T>
void LinkStack<T>::StackTranverse()
{
Node<T> *p = top;
while (p)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}

template<typename T>
LinkStack<T>::~LinkStack()
{
Node<T> *p = NULL;
while (top)
{
p = top;
top = top->next;
delete p;
}
}

int main()
{
LinkStack<int> s;
cout << "依次向栈中放入1-5的连续数:";
for (int j = 1; j <= 5; ++j) //采取头插法
s.Push(j);
cout << "现在栈中的元素为:";
s.StackTranverse();
cout << "现在执行出栈操作 \n";
cout << "出栈的元素为:" << s.Pop() << endl;
cout << "栈的长度为:" << s.StackLength() << endl;
if (s.StackEmpty())
cout << "栈为空 \n";
else
cout << "栈不为空 \n";
cout << "现在栈中的元素为:";
s.StackTranverse();
cout << "向栈中放入10和11 \n";
s.Push(10);
s.Push(11);
cout << "现在栈中的元素为:";
s.StackTranverse();
cout << "栈顶元素为:" << s.GetTop() << endl;

system("pause");
return 0;
}运行结果如下

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 链表