c++实现栈的基本操作
来源:互联网 发布:淘宝卖食品需要什么证 编辑:程序博客网 时间:2024/05/21 19:28
栈的定义
栈(Stack)又称堆栈,是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。
栈有两种实现的方式。一种是顺序存储,和数组类似;一种是链式存储,和单链表类似。
下面主要用顺序存储去实现它,和链式存储相比,主要有下面几个优点:
(1)方便我们进行管理;数组就是只可以在一边进行操作。
(2)应用顺序存储的效率比较高。假如用链式存储的话,在插入删除等操作时,需要遍历整个链表,比较浪费时间;还有一点是CPU的高速缓存的利用率低,每次操作往高级缓存中加载时会多加载一些没有用的空间,不仅浪费时间,还容易“污染”内存。
2.栈的主要的函数接口
void Push(const T & s);//插入数据void Pop();//删除数据bool empty();//判断是否为空size_t size();//元素个数T & Top();//取出最后进入的元素但不删除void print();//输出函数
3.栈的定义
template <typename T>//定义为模板类,实现不同的数据存储class Stack{ public: Stack()//构造函数:_ptr(NULL), _top(0),_capacity(0){}Stack(const Stack<T> & s)//拷贝构造{_capacity = s._capacity;_top = s._top;_ptr = new T[_capacity];for (size_t i = 0; i < _top; i++)//不能使用memcpy函数,(必须考虑浅拷贝的 //问题){ _ptr[i] = s._ptr[i];}}Stack <T> & operator=(const Stack<T> & s)//赋值运算符的重载{if (_capacity < s._capacity)//判断容量是否足够{ _capacity = s._capacity; _ptr = new T[_capacity];}_top = s._top;for (size_t i = 0; i < _top; i++){ _ptr[i] = s._ptr[i];}return *this;}~Stack()//析构函数{if (_ptr){ delete _ptr;}} protected:T * _ptr;//保存数据的指针size_t _top;//存储的数据个数size_t _capacity;//开辟的容量}
4.接口的实现
void Push(const T & s)//插入数据{_Check_capacity();//使用这个函数判断是否需要开辟空间_ptr[_top] = s;_top++;}void Pop()//删除数据{if (_top)//必须保证数据个数不能为负数{ _top--;}}bool empty()//判空{return _top==0;}size_t size()//数据个数{return _top;}T & Top()//输出最后插入的数据{if (!empty()){return _ptr[_top-1];}}void print()//输出{for (size_t i = _top; i > 0; --i){cout << _ptr[i-1] << " ";}cout << endl;}
5.测试结果
void testStack(){Stack<int> s1;s1.Push(0);s1.Push(1);s1.Push(2);s1.Push(3);s1.print();//输出结果3 2 1 0s1.Pop();s1.print();//输出结果2 1 0cout << s1.empty() << endl;//输出结果0cout << s1.size() << endl;//输出结果 3cout << s1.Top() << endl;//输出结果 2}
本文出自 “不断进步的空间” 博客,请务必保留此出处http://10824050.blog.51cto.com/10814050/1762161
0 0
- 栈的基本操作实现-c/c++
- C语言实现栈的基本操作
- C语言 栈的基本操作 栈的实现
- 栈的基本操作(c链表实现)
- 用C语言实现链栈的基本操作
- C语言实现顺序栈的基本操作
- 链栈的基本操作实现(c语言)
- C语言实现顺序栈的基本操作
- 算法与数据结构-栈的基本操作C语言实现
- c实现队列的基本操作
- C实现单链表的基本操作笔记
- C语言实现单链表的基本操作
- C语言实现无头链表的基本操作
- 字符串的基本操作,c语言实现
- 单链表的基本操作c语言实现
- C语言实现单链表的基本操作
- 单链表的基本操作C语言实现
- 串最基本的5个操作的C实现
- codeforces 660C Hard Process
- 函数指针及含参函数指针做参数的实现
- leetcode Jump Game
- StackOverflowError
- CentOS下配置iptables碰到域名解析失败的问题
- c++实现栈的基本操作
- Android switch button初步了解
- 栈的一些小小应用
- 特殊矩阵的压缩存储
- c++实现广义表
- c++实现二叉树(递归)
- 二叉树遍历的非递归实现
- 线索化二叉树
- 堆的简单实现(仿函数)