数据结构学习----链式栈



#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

#pragma once
void Error(string error)
{
cout<<error<<endl;
system("pause");
exit(1);
}


//链式栈
//测试时间2010-3-4
#pragma once
#ifndef LINKNODE_H
#define LINKNODE_H
template<class T>
class LinkNode
{
public:
T data; //数据域
LinkNode<T> *next; //链指针
LinkNode(LinkNode<T> *p=NULL){next=p;} //仅初始化指针成员的构造函数
LinkNode(T item,LinkNode<T> *p=NULL) //初始化数据与指针成员的构造函数
{ data=item;next=p;}
};
#endif

#ifndef LINKSTACK_H
#define LINKSTACK_H
template<class T>
class LinkStack
{
private:
LinkNode<T>* top;
int size;
public:
LinkStack(){top=NULL;size=0;} //构造函数
~LinkStack(){ClearStack();} //析构函数
void ClearStack(); //清空堆栈
int Size(){return size;} //返回堆栈长度

void Push(T data); //进栈
T Pop(); //出栈

LinkNode<T>* GetTop(); //取得栈顶元素指针
bool IsEmpty(); //判断堆栈是否为空
LinkStack<T>& operator=(LinkStack<T>& stack); //运算符重载
};
#endif

template<class T>
void LinkStack<T>::ClearStack()
{
LinkNode<T> *node;
while(top!=NULL)
{
node=top;
top=top->next;
delete node;
}
size=0;
}

template<class T>
void LinkStack<T>::Push(T data)
{
top=new LinkNode<T>(data,top);
size++;
if(top==NULL)
Error("进栈失败!");
}

template<class T>
T LinkStack<T>::Pop()
{
if(size==0)
Error("出栈失败!");
LinkNode<T>* node=top;
top=top->next;
T data=node->data;
delete node;
node=NULL;
size--;
return data;
}

template<class T>
LinkNode<T>* LinkStack<T>::GetTop()
{
if(size==0)
Error("读取数据出错!");
return top;
}


template<class T>
bool LinkStack<T>::IsEmpty()
{ return (size==0)?true:false;}


template<class T>
LinkStack<T>& LinkStack<T>::operator =(LinkStack<T> &stack)
{
LinkNode<T> *node=stack.GetTop();
LinkStack<T> s;
while(node!=NULL)
{
s.Push(node->data);
node=node->next;
}
while(s.Size()>0)
{
Push(s.Pop());
}
return *this;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值