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 前言: 匹夫在日常和别人交流的时候,常常会发现一旦讨论涉及到“类型”,话题的热度就会立马升温,因为很多似是而非.或者片面的概念常常被人们当做是全面和正确的答案.加之最近在园子看到有人翻译的& ...
随机推荐
- Activity 切换 动画
overridePendingTransition的简介 1 Activity的切换动画指的是从一个activity跳转到另外一个activity时的动画. 它包括两个部分:一部分是第一个acti ...
- PHP中简单的图形处理
PHP中简单的图形处理 计应134凌豪 1.加载GD库 GD库是一个开放的动态创建图像.源代码公开的函数库,可以从官方网站http://www.boutell.com/gd处下载.目前,GD库支持GI ...
- XCode: Target Settings和Project Settings的区别
一个XCode project包含了两种设置:Project Settings 和 Target Settings. 它们之间的主要区别在于:Project settings应用于project里面的 ...
- Android的多媒体框架OpenCore介绍
网上资料很少, 不过还是找到一个比较详细的说明: 特地在此整理了下: 地址:http://blog.csdn.net/djy1992/article/details/9339787 分为几个阶段: 1 ...
- 海康威视研究院ImageNet2016竞赛经验分享
原文链接:https://zhuanlan.zhihu.com/p/23249000 目录 场景分类 数据增强 数据增强对最后的识别性能和泛化能力都有着非常重要的作用.我们使用下面这些数据增强方法. ...
- 网易云课堂_程序设计入门-C语言_第三周:循环_1奇偶个数
1 奇偶个数(5分) 题目内容: 你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据.程序输出读到的数据中的奇数和偶数的个数. 输入格式: 一系列正整数,整数的范围是(0,1 ...
- How to use pagination in Magento
classYour_Module_Block_Entityname_ListextendsMage_Core_Block_Template { protected function _construc ...
- MVC中Json的使用:Controller中Json的处理【转】
一.当查询得到的数据符合前台要求,不需要做任何处理,直接DataList To Json 返回前台. 代码: , out recordCount); return Json(allEntities, ...
- Hopcroft-Karp算法模版
#include <cstdio> #include <cstring> #include <vector> #include <queue> #inc ...
- spoj 8222 Substrings (后缀自动机)
spoj 8222 Substrings 题意:给一个字符串S,令F(x)表示S的所有长度为x的子串中,出现次数的最大值.求F(1)..F(Length(S)) 解题思路:我们构造S的SAM,那么对于 ...