C++ 栈的实现
#ifndef _STACK_H
#define _STACK_H
#pragma once
template< class T >
class Stack
{
public:
Stack( void ) : size( 0 ), capacity( 1 ),_( new T[ capacity ] ){} ;//构造函数 成员是按照他们在类中出现的顺序进行初始化的,而不是按照他们在初始化列表出现的顺序初始化的
Stack( const Stack& ) ;//拷贝构造函数
~Stack( void ) ;//析构函数
Stack& operator = ( const Stack& ) ;//重载赋值运算符
int Size( void ) const ;//返回栈中元素数目
int Capacity( void ) const ;//返回当前栈的容量
bool IsEmpty( void ) const ;//判断栈是否为空栈
T& Top( void ) const ;//返回栈顶元素
void Push( const T& ) ;//将元素压入栈中,当元素数目超过栈的容量时重建栈
void Pop( void ) ;//弹出栈顶元素
protected:
int size ;//栈中元素数目
int capacity ;//栈的容量
void Expand( void ) ;//扩充栈
void Decrease( void ) ;//压缩栈
private:
T* _ ;//保存栈中元素的数组
} ;
template< class T >
Stack< T >::Stack( const Stack< T > & s ) : size( s.size ) , capacity( s.capacity ),_( new T[ capacity ] )
{
for( int i = 0 ; i < capacity ; ++i )
_[ i ] = s._[ i ] ;
}
template< class T >
Stack< T >::~Stack( void )
{
delete [ ]_ ;
}
template< class T >
Stack< T >& Stack< T >::operator = ( const Stack& s )
{
_ =new T[ s.capacity ] ;
size = s.size ;
capatity = s.capacity ;
for( int i = 0 ; i < capacity ; ++i )
_[ i ] = s._[ i ] ;
}
template< class T >
int Stack< T >::Size( void ) const
{
return size ;
}
template< class T >
int Stack< T >::Capacity( void ) const
{
return capacity ;
}
template< class T >
bool Stack< T >::IsEmpty( void ) const
{
return size == 0 ;
}
template< class T >
T& Stack< T >::Top( void ) const
{
return _[ size - 1 ] ;
}
template< class T >
void Stack< T >::Pop( void )
{
if( size == capacity / 2 ) Decrease( ) ;
--size ;
}
template< class T >
void Stack< T >::Push( const T& obj )
{
if( size == capacity ) Expand( ) ;
_[ size++ ] = obj ;
}
template< class T >
void Stack< T >::Expand( void )
{
capacity *= 2 ;//double the capacity of the storage array
T* __ = new T[ capacity ] ;
for( int i = 0 ; i < size ; ++i ) __[ i ] = _[ i ] ;
delete [ ]_ ;
_ = __ ;
}
template< class T >
void Stack< T >::Decrease( void )
{
capacity /= 2 ;//half the capacity of the storage array
T* __ = new T[ capacity ] ;
for( int i = 0 ; i < size ; ++i )
__[ i ] = _[ i ] ;
delete [ ]_ ;
_ = __ ;
}
#endif
C++ 栈的实现的更多相关文章
- 通往全栈工程师的捷径 —— react
腾讯Bugly特约作者: 左明 首先,我们来看看 React 在世界范围的热度趋势,下图是关键词“房价”和 “React” 在 Google Trends 上的搜索量对比,蓝色的是 React,红色的 ...
- Java 堆内存与栈内存异同(Java Heap Memory vs Stack Memory Difference)
--reference Java Heap Memory vs Stack Memory Difference 在数据结构中,堆和栈可以说是两种最基础的数据结构,而Java中的栈内存空间和堆内存空间有 ...
- duang~免费的学习视频来啦:学霸君之全栈测试
学霸君向童鞋们推荐一款 同名学霸学习 视频教程 重点是完全免费收看学习噢!!! 今天 学霸君推荐腾讯课堂的学霸君之全栈测试 复制下方链接至腾讯课堂中报名学习 https://ke.qq.com/cou ...
- [数据结构]——链表(list)、队列(queue)和栈(stack)
在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...
- BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 8748 Solved: 3835[Submi ...
- BZOJ 4453: cys就是要拿英魂![后缀数组 ST表 单调栈类似物]
4453: cys就是要拿英魂! Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 90 Solved: 46[Submit][Status][Discu ...
- BZOJ 3238: [Ahoi2013]差异 [后缀数组 单调栈]
3238: [Ahoi2013]差异 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2326 Solved: 1054[Submit][Status ...
- .NET全栈开发工程师学习路径
PS:最近一直反复地看博客园以前发布的一条.NET全栈开发工程师的招聘启事,觉得这是我看过最有创意也最朴实的一个招聘启事,更为重要的是它更像是一个技术提纲,能够指引我们的学习和提升,现在转载过来与各位 ...
- Nodejs之MEAN栈开发(八)---- 用户认证与会话管理详解
用户认证与会话管理基本上是每个网站必备的一个功能.在Asp.net下做的比较多,大体的思路都是先根据用户提供的用户名和密码到数据库找到用户信息,然后校验,校验成功之后记住用户的姓名和相关信息,这个信息 ...
- 匹夫细说C#:不是“栈类型”的值类型,从生命周期聊存储位置
0x00 前言: 匹夫在日常和别人交流的时候,常常会发现一旦讨论涉及到“类型”,话题的热度就会立马升温,因为很多似是而非.或者片面的概念常常被人们当做是全面和正确的答案.加之最近在园子看到有人翻译的& ...
随机推荐
- Android SDK 国内源-好用。
proxy: mirrors.opencas.cn port : 80
- Example: Develop Web application on Baidu App Engine using CherryPy
In the past few months, I have developed two simple applications on Baidu App Engine. Compared to Go ...
- Protel在PCB中添加汉字
使用Protel 99SE的工程人员都知道Protel在PCB绘制中是不支持汉字输入的,但作为工厂生产调试的方便,不可避免的要在PCB上制作中文标示,有时为说明板子的用途,注意事项等都要输入中文丝印, ...
- 提交(post)xml文件给指定url的2种方法
原文:提交(post)xml文件给指定url的2种方法 1 这段代码是在网上搜到的,拿来共享,项目正好要用到.其中的data你只需要传递一个xml字符串就可以 protected string ...
- java代码收藏:获取HttpServletRequest中某一前缀的参数
public static Map getParametersStartingWith(ServletRequest request, String prefix) { Enumeration par ...
- denoising autoencoder
神经网络的挑战和关键技术: 1.神经网络结构决定(层,神经元,连接) 加入特定领域的知识(CNN 图片处理) 2.模型复杂度高 大的数据量: regularization: dro ...
- 安装vmware tools失败解决方法
失败提示: reating a new initrd boot image for the kernel. update-initramfs: Generating /boot/initrd.img- ...
- localStorage点击次数存储
<!DOCTYPE html><html><head><meta charset="utf-8"> <title>菜鸟教 ...
- 一个C/C++结构体初始化有趣的现象
我们知道C语言当中结构可以使用{}进行初始化,例如有结构体定义如下: typedef struct type_t { int a; int b; int c; int d; }type_t; 我们可以 ...
- C#小性能知识
字符串比较 string s = ""; 1) if(s == ""){} 2) if(s == string.Empty){} 3) if (string.I ...