栈的相关知识及栈的实现
来源:互联网 发布:第三只眼监控软件 编辑:程序博客网 时间:2024/06/03 16:17
栈是一种常用的数据结构,通常称为FILO。
栈通常分为3种:
(1) 数据结构意义的:栈(FILO);
(2) 虚拟地址空间: 栈(虚拟内存分段);
(3) 栈桢: 栈(运行程序时为了保存数据二开辟的空间,随着函数的调用而不断压栈,随着函数的调用结束 而销毁);
栈的数据结构图示:
栈通常用顺序表来实现。
template <typename T> //定义一个类模板,对于栈来进行操作
class Stack{private:T *top; //定义一个栈顶指针,用来维护栈int _sz; //_sz来保存栈的大小int _capacity; //_capacity保存栈的容量protected:void CheckCapacity();public:Stack(); //构造函数~Stack(); //析构函数void Pop(); //出栈void Push(const T x); //压栈bool Empty(); //检查这个栈是不是为空栈,若为空,返回trueint GetSize(); //获取栈的大小 T GetTop(); //获取栈顶元素void Print(); 打印栈中的所有元素};
#include<iostream>using namespace std;#include<cassert>template <typename T> class Stack{private:T *top;int _sz;int _capacity;protected:void CheckCapacity();public:Stack();~Stack();void Pop();void Push(const T x);bool Empty();int GetSize(); T GetTop();void Print();};template <typename T> Stack<T>::Stack():top(NULL),_sz(0),_capacity(0){}template <typename T> Stack<T>::~Stack(){if(top != NULL){delete[] top;top = NULL;}}template <typename T> void Stack<T>::Pop(){assert(top);this->_sz--;}template <typename T>void Stack<T>:: CheckCapacity(){if(this->_capacity == this->_sz){int NewCapacity = this->_capacity * 2+5;int *tmp = new T[NewCapacity];for(int i=0;i<this->_sz;i++){tmp[i] = top[i];}delete [] top;top = tmp;this->_capacity = NewCapacity; }}template <typename T> void Stack<T>:: Push(const T x){CheckCapacity();this->top[_sz]=x;this->_sz++;}template <typename T> bool Stack<T>:: Empty(){if(top == NULL){return true;}else{return false;}}template <typename T> int Stack<T>:: GetSize(){return --this->_sz;}template <typename T> T Stack<T>:: GetTop(){return this->top[this->_sz];}template <typename T> void Stack<T>:: Print(){for(int i=this->_sz;i>=0;i--){cout<<this->top[i]<<" ";}cout<<endl;}
void TestStack(){Stack<int> stack1;stack1.Push (1);stack1.Push (2);stack1.Push (3);stack1.Push (4);stack1.Push (5);stack1.Push (6);stack1.Push (7);stack1.Push (8);stack1.Push (9);stack1.Push (10);stack1.Push (11);int empty=stack1. Empty();int size=stack1. GetSize();int top=stack1.GetTop();stack1.Print ();cout<<"this stack is NULL"<<empty<<endl;cout<<"this stack size is"<<size<<endl;cout<<"this stack top element is"<<top<<endl;stack1.Pop ();stack1.Pop ();stack1.Print ();}int main(){TestStack();system("pause");return 0;}
测试结果:
1 0
- 栈的相关知识及栈的实现
- 栈的相关知识
- 多线程的相关知识及代码的实现
- 队列及栈相关题目的实现
- GCC 编译过程及相关的知识
- 液晶屏接口的分类及相关知识
- regexp_like的相关知识及使用示例
- 离心机及离心机的相关知识
- 面向对象的相关知识及理解
- 线程的创建方式及相关知识
- ibatis的相关知识及配置
- 函数的相关知识及函数指针
- Activity的周期及相关知识
- Android的Activities相关状态及知识
- android的工程目录及相关知识
- 集合的排序及相关知识
- 在Android中实现推送方式的底层原理与推送的知识及相关解决方案
- ios 与pc的数据交互 XML Webservice实现原理及相关知识
- 第十三章代码
- EKF(扩展卡尔曼滤波)参数理解
- 7.11 AHDU 4770 Lights Against Dudely
- 设计模式-----单例模式
- 限定一个类对象在堆或者栈上创建
- 栈的相关知识及栈的实现
- hibernate中的多表对应关系
- iOS架构师之路:慎用继承
- Lazarus 将gb2312的MemoryStream转换成String
- 关于Spring RestTemplate乱码问题解决
- linux .so 的使用
- HTML5总结系列(二)--新增表单标签及表单属性
- Gym 100803 B Miscalculation
- 深入理解KNN算法