数据结构之栈的实现

  栈是一种典型的线性表,它非常的简单,实现也很简单,但他的应用却非常的广泛,如函数的递归,一些撤销功能的实现等等!

  栈是只能访问头节点的线性表!无论是插入,删除还是查找都只需要访问头节点。

  他的实现一般有两种,一种是用向量表的实现,这种方法的有点在于节省空间,但缺点也比较明显,就是不够自由,容易出现栈溢出,当然我们可以通过另外申请空间来解决这个问题,但这样显得比较麻烦!还有一种方法是利用链表来实现!这种方法虽然造成了两倍的空间浪费,但基本不用担心栈溢出的情况,实现起来也非常简单!

下面就是我的c++代码实现:

//stack.h

#ifndef STASK_H
#define STACK_H
template<class objs_t> 
class stack{
	struct node_t{
		objs_t data;
		node_t *next;
		node_t ( objs_t &x=objs_t(), node_t *p=NULL ):data(x),next(p){}
	};
public:

	stack(){st=NULL;siz=0;}
	stack(const stack &p)
	{
		st=NULL;siz=0;
		node_t *n=p.st;
		clear();
		while(n!=NULL)
		{
			push(n->data);
			n=n->next;
		}
	}
	~stack(){

		clear();
	}
	void 
		clear(){
	
		while (!empty())
			pop();
	}
	bool empty()const{
		return siz==0;
	}
	int size()const
	{return siz;}
	void push(objs_t &x)
	{
	if(siz!=0)
	st=new node_t(x,st);
	else
		st=new node_t(x,NULL);
	siz++;
	}
	objs_t top()const{
		return st->data;
	}
	void pop(){
		node_t *p=st;
		st=st->next;
		siz--;
		delete p;
	}
	private:
		node_t *st;
		int siz;
};

#endif

可以看到,实现起来相当的简单!但还是值得一提的是他的应用极其广泛,比如中缀表达式的转化成后缀表达式的计算,还有如图的深度优先遍历等等!总之栈作为一种最简单也最常见的数据结构之一,必须要好好理解!


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值