数据结构基础知识(四)

顺序表

3.栈

栈是一种特殊的线性表在逻辑结构和存储结构上,栈与一般的线性表没有什么区别,但是对于允许的操作却加以限制,栈的插入和删除操作只允许在表尾的一端进行,因此,栈是操作受限的线性表。

(1)栈的抽象数据类型以及实现

栈中数据元素的类型都相同,称为栈元素。往栈里插入一个元素称为进栈(push),从栈里删除一个元素为出栈(pop)。栈也称为后进先出表(LIFO)。

栈中插入和删除的一端称为栈顶,另一端则称为栈底。栈底固定不动,栈顶不断变化。不含栈元素的栈称为空栈。

栈顶指针(top),总是指向最后一个进栈的栈元素。存放栈元素的数组称为栈空间,这片空间可以静态分配,也可以动态生成。 

用类表示的栈的抽象数据类型如下:


template <class T>
class Stack
{
	private:
	int top;          //栈顶指针
	T *elements;        //存放栈元素的数组
	int MaxSize;
	public:
	Stack(int MaxSize =defaultsize);        //创建栈空间,生成一个空栈
	~Stack(void){delete[]elements;}         //释放栈空间
	
	int Push(const T& item);
	
	T Pop(void);
	
	T GetTop(void);
	
	void MakeEmpty(void){top= -1;}
	
	boolean IsEmpty(void)const{return boolean(top== -1);}
	boolean IsFull(void)const{return boolean(top ==MaxSize-1);}
};
template<class T>
Stack<T>::Stack(int s)
{
	MaxSize = s;         
	elements = new T[MaxSize];           //创建栈空间
	top = -1;                         //生成一个空栈
}

进栈Push():

template<class T>
int Stack<T>::Push(const T& item)    //进栈,若栈不满,则item进栈,返回0;否则返回-1;
{
	if (!IsFull()){elements[++top]=item;return 0;}
	else return -1;
}

出栈Pop(void):

template<class T>
Stack<T>::Pop(void)             //出栈,若栈非空,则栈顶元素出栈,返回其值;否则返回NULL。
{
	if (!IsEmpty())return elements[top--];
	else return NULL;
}

读栈顶元素: 

template<class T>
T Stack<T>::GetTop(void)
{                              //读栈顶。若栈非空,则返回栈顶元素的值;否则返回NULL。
	if (!IsEmpty())return elements[top];
	else return NULL;
}

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值