堆栈
来源:互联网 发布:女用催情药 知乎 编辑:程序博客网 时间:2024/05/22 09:39
堆栈
堆栈是后进先出的数据结构,会有一个指向堆栈顶部元素的指针stacktop。
堆栈可以采用数组存储或者链表存储。
template<class T>class stack{ virtual ~stack()=0; virtual bool empty()=0; virtual int size()=0; virtual void pop()=0; virtual void push(const T& theElement)=0; virtual T& top()=0;}
ArrayStack
堆栈为空时,stacktop=-1。
template<class T>class arrayStack<T>:public stack{public: stack(int capacity=10){ arrayLength=capacity; element=new T[arrayLength]; stacktop=-1; } ~stack(){ delete [] element; } //这里没有定义size变量,因为stacktop+1就是栈的大小。因此这里也用 //stacktop==-1来判断堆栈是否为空。在增加元素的时候要判断栈的大小是不是 //也到了arraylength,如果是的,就调用chang1Dlength()函数使 //arrayLength*=2。 void pop(){ if(empty()) ... element[stacktop--].~T();//即使是数组存储,也要记得调用元素T的析构函数来删除 }private: int stacktop; T* element; int arrayLength;}
LinkedStack
如果把链表的左端作为栈顶,则可以利用链表操作Insert(0,x)和Delete(1,x)来实现堆栈的插入和删除操作。这两种链表操作的时间复杂性均为 O( 1 )。则就stacktop指向链表最左端。
struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} };template<class T>class LinkedStack:public stack{public: linkedstack(){ stacktop=NULL; size=0; } //每一个节点都要删除 ~linkedstack(){ while(stacktop) { ListNode* node=stacktop->next; delete stacktop; stacktop=node; } } void push(const T& theElement){ stacktop=new ListNode(theElement,stacktop); size++; } void pop() { ListNode* node=stacktop->next; delete stacktop; stacktop=node; }private: ListNode* stacktop; int size;}
0 0
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- SecureCRT中文显示乱码
- 恢复ORACLE被误更新或删除数据的办法
- 在 CentOS 6.7 上配置 Cisco AnyConnect VPN
- 提升页面转化率100招
- 自定义布局
- 堆栈
- jquery操作select下拉框的多种方法(选中,取值,赋值等) 转载
- 泊松融合
- 技术进步与管理创新
- 【Hibernate】Hibernate多表查询后,将查询结果转化为实体
- centos7的安装及配置
- setTimeout
- MmGetSystemRoutineAddress 函数实现代码
- Java进阶(十六)使用new Date()和System.currentTimeMillis()获取当前时间戳