数据结构C++——栈

一、定义

DEF.
栈(stack)是一个线性表,其插入(也称为添加)和删除操作都在表的同一端进行。

  • 其中允许插入和删除的一端被称为栈顶(top)
  • 另一端被称为栈底(bottom)
  • 栈是一个后进先出( LIFO (Last-In, First-Out) )表
    在这里插入图片描述

二、ADT

ADT包含实例和操作。

  • 实例
    元素线性表,一端为栈底,另一端为栈顶
  • 操作
    empty();//栈为空返回true,否则返回false
    size();//返回栈中元素个数
    top();//返回栈顶元素
    pop();//删除栈顶元素
    push(x);//将元素x压入栈
template<class T>
class stack{
   
	public:
		virtual ~stack(){
   }
		// 栈为空返回true,否则false
		virtual bool empty() const=0;
		// 返回栈中元素个数
		virtual int size() const=0;
		// 返回栈顶元素
		virtual T& top() =0;
		// 删除栈顶元素
		virtual void pop() = 0;
		// 将元素theEle入栈
		virtual void push(const T& theEle) =0;
}

三、栈的描述方法

栈是一种线性表,因此栈可以使用任何一种线性表的描述方法

  • 数组描述
  • 链表描述

3.1 数组描述

栈使用数组描述,有两种实现方法:

  1. 使用数组描述的线性表arrayList, 通过arrayList类的派生得到数组描述的栈类derivedArrayStack
  2. 定制数组描述的栈类arrayStack类

3.1.1 派生arrayList

思路:

  • 确定栈顶元素的索引:arrayList< T >::size()-1
  • 应用arrayList类中的方法来实现
template<class T>
class derivedArrayStack::private arrayList<T>,public stack<T>
{
   
	public:
	derivedArrayStack(int initialCapacity=10):arrayList<T>(initialCapacity){
   }
	bool empty() const{
   return arrayList<T>::empty();}
	int size() const{
   return arrayList<T>::size();}
	T& top(){
   
		if(arrayList<T>::empty()) throw StackEmpty();
		return get(arrayList<T>::size()-1;)
	}
	void pop(){
   
		if(arrayList<T>::empty()) throw StackEmpty();
		erase(arrayList<T>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

边懵懵'.ㅅ'

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值