数据结构之栈的实现

来源:互联网 发布:苏州淘宝运营工作内容 编辑:程序博客网 时间:2024/04/29 12:47

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

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

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

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

//stack.h

#ifndef STASK_H#define STACK_Htemplate<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);elsest=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

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


3 0
原创粉丝点击