数据结构之通过类模板实现栈
2018-06-17 23:32:24来源:未知 阅读 ()
闲来无事,写了一段通过类模板实现一个简单栈的代码,分享给大家.....
(关于栈的更多的详细信息,详见:http://www.cplusplus.com/reference/stack/stack/?kw=stack)
栈的声明及实现
//Stack.h //代码量太少,就不分文件实现了 //温馨提示:模板程序分文件时,请将头文件后缀名修改为.hpp #ifndef __STACK_H__ #define __STACK_H__ template<typename T> class Stack{ public: //构造函数 Stack() :_pBase(NULL) ,_uSize(0) ,_uCapacity(0){} //析构函数 ~Stack(){ if(_pBase!=NULL){ delete[] _pBase; _pBase = NULL; } _uSize = 0; _uCapacity = 0; } public: //判断是否为空 bool Empty(){ return _uSize==0; } //获取栈内有效元素个数 size_t Size(){ return _uSize; } //获取栈顶元素 T &Top(){ return _pBase[_uSize-1]; } //获取栈顶元素const版本 const T &Top()const{ return _pBase[_uSize-1]; } //入栈 void Push(const T &x){ _CheckCapacity(); //检测是否需要进行扩容操作,并进行扩容 _pBase[_uSize++] = x; //插入数据、有效元素个数自增 } //出栈 void Pop(){ if(!Empty()){ //栈非空 _uSize--; //有效元素自减 } } private: //检测是否扩容 void _CheckCapacity(){ if( _uSize>=_uCapacity ){ size_t NewCapacity = _uCapacity*2+10; //扩容后容量 T * NewBase = new T[NewCapacity]; //新空间 if(_pBase!=NULL){ //不是空栈 for(size_t i=0; i<_uSize; ++i){ //拷贝数据 NewBase[i] = _pBase[i]; } delete[] _pBase; //释放原有空间 } _pBase = NewBase; //更新栈的数据指针 _uCapacity = NewCapacity; //更新栈的容量 } } private: T * _pBase; //基址 size_t _uSize; //有效元素 size_t _uCapacity; //大小 }; #endif
测试代码
#include<iostream> #include"Stack.h" //测试函数,测试基本接口 void StackTest(){ Stack<int> s1; s1.Pop(); //测试对空栈进行Pop s1.Push(1); //第一次扩容 s1.Pop(); s1.Push(1); s1.Push(2); s1.Push(3); s1.Push(4); s1.Push(5); s1.Push(6); s1.Push(7); s1.Push(8); s1.Push(9); s1.Push(10); std::cout<<"目前栈内有 "<<s1.Size()<<" 个元素"<<std::endl; s1.Push(11); //第二次扩容 std::cout<<"栈顶元素为:"<<s1.Top()<<std::endl; s1.Top() = 20; std::cout<<"修改后:"<<s1.Top()<<std::endl; } int main(){ StackTest(); return 0; }
总结:
以上代码,仅供个人娱乐.
在STL中的栈(stack)和队列(queue)的模板参数列表里除了类型(T)以外还有一个容器(Container).
栈(stack)和队列(queue)在这里都默认使用了双向队列(deque)作为容器(Container).
关于双向队列的更多详细信息详见:http://www.cplusplus.com/reference/deque/deque/
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++冒泡排序 (基于函数模板实现) 2020-05-31
- C++ 模板类vector 2020-05-31
- C++ 模板类array 2020-05-31
- C++ 模板类vector 2020-05-30
- 数据结构—链表 2020-05-29
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash