首页 > 其他 > 详细

数据结构之栈的实现

时间:2014-04-03 04:17:30      阅读:489      评论:0      收藏:0      [点我收藏+]

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

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

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

下面就是我的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

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


数据结构之栈的实现,布布扣,bubuko.com

数据结构之栈的实现

原文:http://blog.csdn.net/alop_daoyan/article/details/22823357

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!