数据结构之Stack的实现

栈是先进后出,比实现更重要的是应用。如括号匹配、栈混洗、中缀表达式求值。本文先写Stack的实现。

从Vector派生的Stack

# pragma once
# include "Vector.h"

template <typename T>
class Stack : public Vector<T> //从Vector派生的栈
{
    
    
public:
	void push(T const & val) 
	{
    
    
		Vector<T>::insert(val, Vector<T>::size);
	}

	T pop(void)
	{
    
    
		return Vector<T>::elem[--Vector<T>::size];
	}

	T & top(void)
	{
    
    
		return Vector<T>::elem[Vector<T>::size - 1];
	}
};

从List派生的Stack

template <typename T>
class Stack :public List<T>
{
    
    
public:
	void push(T const & val)
	{
    
    
		List<T>::insertAsFirst(val);
	}

	T pop(void)
	{
    
    
		T tmp = List<T>::first()->data;
		List<T>::remove(List<T>::first());
		return tmp;
	}

	T & top(void)
	{
    
    
		return List<T>::first()->data;
	}
};

总结

如果remove实现的时候返回值是被移除节点的data,则top和pop不用访问最底层的elem,直接return remove即可

猜你喜欢

转载自blog.csdn.net/weixin_45339670/article/details/131800075
今日推荐