栈
2016-12-05 14:55
239 查看
栈是啥? 栈就是只允许在表的末端进行插入或者删除的线性表。
还不懂?
上图
只允许在栈顶access(访问),插、删都只能在栈顶。显而易见stack也是一种线性表。只不过是对数据的访问做出了限制,所以我们可以用实现线性表的方式实现stack,只不过改变了对外的接口。(关于线性表可以看我的线性表的内容),即表明Stack也有两种实现方式。
顺序栈
链式栈
还不懂?
上图
只允许在栈顶access(访问),插、删都只能在栈顶。显而易见stack也是一种线性表。只不过是对数据的访问做出了限制,所以我们可以用实现线性表的方式实现stack,只不过改变了对外的接口。(关于线性表可以看我的线性表的内容),即表明Stack也有两种实现方式。
顺序栈
template<class T> class SeqStack { private: T *data; int maxSize,top; public: SeqStack(int size):maxSize(size){data = new T[maxSize];} ~SeqStack(){delete []data;} bool push(T& x){ data[top++] = x;} bool pop(T& x){ x = data[top--];} };
链式栈
template<class T> struct stackNode { T data; stackNode<T>* next; stackNode(data,next=NULL):data(data),next(next){} }; template<class T> class LinkStack { private: stackNode<T>* front; public: LinkStack(){size=0;front=NULL;} ~LinkStack(); bool push(T& x); bool pop(T& x) }; template<class T> bool LinkStack<T>::pop(T& x) { stackNode<T>*temp = front; x = temp->data; front = front->next; delete temp; return true; } template<class T> bool LinkStack<T>::push(T& x) { front = new stackNode<T>(x,front); return true; } template<class T> LinkStack<T>::~LinkStack<T>() { stackNode<T>*cur; while(front!=NULL) { cur = front; front = front->next; delete cur; } } //如果想直接使用Stack的话,可以使用 STL 头文件<stack>里面的stack类模板。(嗯。。。关于STL里面stack的使用,我好像也写了。如果还没有我会补上去的)
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- C++基于栈实现铁轨问题
- 数据结构之Treap详解
- 浅析C语言中堆和栈的区别
- C语言栈的表示与实现实例详解
- C语言实现颠倒栈的方法
- 算法系列15天速成 第十天 栈
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- 一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Array栈方法和队列方法的特点说明
- C#创建安全的栈(Stack)存储结构
- C语言对栈的实现基本操作