数据结构之堆栈(数组实现)

/****************************
* Date   : 2015-07-20
* Description: stack.h
*****************************/
#ifndef _STACK_H
#define _STACK_H

template<class T>
class Stack{
public:
 Stack(int MaxStackSize = 10);
 ~Stack() {delete [] stack;}
 bool IsEmpty() const {return top == -1;}
 bool IsFull() const {return top == MaxTop;}
 T Top() const;
 Stack<T>& Push(const T& val);
 T Pop();
private:
 int top;
 int MaxTop;
 T *stack;
};
//
template<class T>
Stack<T>::Stack(int MaxStackSize /* = 10 */)
{
 top = -1;
 MaxTop = MaxStackSize - 1;
 stack = new T[MaxStackSize];
}
//
template<class T>
Stack<T>& Stack<T>::Push(const T& val)
{
 if(IsFull())
 {
  cerr << "栈空间已满" << endl;
  exit(EXIT_FAILURE);
 }
 stack[++top] = val;
 return *this;
}
//
template<class T>
T Stack<T>::Top() const
{
 if(IsEmpty())
 {
  cerr << "栈空间为空" << endl;
  exit(EXIT_FAILURE);
 }
 return stack[top];
}
//
template<class T>
T Stack<T>::Pop()
{
 if(IsEmpty())
 {
  cerr << "栈空间为空" << endl;
  exit(EXIT_FAILURE);
 }
 return stack[top--];
}
#endif //_STACK_H

时间: 2024-08-08 03:02:29

数据结构之堆栈(数组实现)的相关文章

SDUT 3347 数据结构实验之数组三:快速转置

数据结构实验之数组三:快速转置 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 转置运算是一种最简单的矩阵运算,对于一个m*n的矩阵M( 1 = < m < = 10000,1 = < n < = 10000 ),它的转置矩阵T是一个n*m的矩阵,且T( i , j )=M( j , i ).显然,一个稀疏矩阵的转置仍然是稀疏矩阵.你的任务是对给定一个m*n的稀疏矩阵( m

(2)redis的基本数据结构是动态数组

redis的基本数据结构是动态数组 一.c语言动态数组 先看下一般的动态数组结构 struct MyData { int nLen; char data[0]; }; 这是个广泛使用的常见技巧,常用来构成缓冲区.比起指针,用空数组有这样的优势: 1.不需要初始化,数组名直接就是所在的偏移   2.不占任何空间,指针需要占用int长度空间,空数组不占任何空间.  这个数组不占用任何内存,意味着这样的结构节省空间: 该数组的内存地址就和他后面的元素的地址相同,意味着无需初始化,数组名就是后面元素的地

【算法与数据结构】图 -- 数组表示法

图的数组表示法 借助一个二维数组表示图,该二维数组的第i行,第j列的值表示从Node[i]到Node[j]: 无向图(网):是否有边 / 权值,arr[i][j] == arr[j][i],无向图(网)的特性,矩阵关于对角线对称. 有向图(网):是否有弧 / 权值. //图的数组表示法 //最大顶点个数 const int MAX_VERTEX = 100; //最大值 const int MAX_VALUE = (1 << 31) - 1; typedef struct _tagArcCel

当数据结构遇到编程语言——数组

赵振江 数据结构 数组 一维数组 "数组"你真的很了解吗? 数组大家都不是很陌生,它已经"植入"了许多编程语言,但初学者一提到数组,可能不会联想到"数据结构",而是想到的会是一种"数据类型",数组本质上就是一种极其简单的数据结构.所谓数组,就是相同数据类型的元素按一定顺序排列的集合.也就是在内存中划分一段连续的且大小固定(注意是连续)的内存空间(或者其他存储器)保存相同数据类型的数据,如下图.一般说的简单数组,都是静态的数组,

数据结构——树状数组

我们今天来讲一个应用比较广泛的数据结构——树状数组 它可以在O(nlogn)的复杂度下进行单点修改区间查询,下面我会分成三个模块对树状数组进行详细的解说,分别是树状数组基本操作.树状数组区间修改单点查询的实现.树状数组查询最值的实现 一. 树状数组一般分为三种操作,初始化.修改.查询 在讲基本操作之前,我们先来看一张图 这张图就是树状数组的存储方式,对于没有接触过树状数组的人来说看懂上面这张图可能有些困难,上图的A数组就是我们的原数组,C数组则是我们需要维护的数组,这样存储能干什么呢,比如我们在

从零开始实现数据结构(一) 动态数组

从零开始实现数据结构(一) 动态数组 动态数组是所有数据结构中最简单的一种,甚至在很多的语言中,数组本身就是可以不定长的.因为在学习c++的时候,使用动态数组的各种操作都不是很方便(数据结构的学习最好还是c或c++,基础打好了其他的语言数据结构就很简单).所以开始学习如何去实现一个像STL中的vector一样的动态数组. 创建数组基类CArray 因为后面还准备写一个有序数组,所以这里使用一个CArray类,把数组的各种基本特性先创建好.后面需要写什么数组,就可以写它下面的子类,来完成特殊的功能

6.6-2-数组与数据结构(用数组及其函数实现堆栈等数据结构)

9.5.6.1使用数组实现堆栈 实现栈 1. int array_push ( array array ,mixed var [,mixed.] ) 添加参数到数组尾部,key+1 ,返回数组元素个数 即使数组有字符串键名,添加的元素也始终是数字键. 使用array_push 函数和直接赋值的方式是一样的. 2.mixed array_pop ( array &array ) echo array_pop ( $lamp ) ; 返回最后一个元素PHP,并删除之,数组元素数量减一 实现队列 ar

数据结构学习---堆栈的动态数组实现及链表实现

堆栈 [链表实现堆栈] 优点:可以无限增添元素,只要内存足够, 缺点:内存中存储位置不连续 typedef int ElementType; //只能向头部插入元素,因为如果在尾部插入,删除时,找不到上一个节点/ //因为链表是单向的 //所以 push pop 操作在头结点进行 class Stack{ public: Stack(){ S=(Stack*)malloc(sizeof(Stack)); //建立一个不存数据的头结点,方便增删节点 S->Next=NULL; sz=0; } bo

数据结构实践项目——数组和广义表

本文针对 [数据结构基础系列网络课程(5):数组和广义表] 1. 数组的基本概念与存储结构 2. 特殊矩阵的压缩存储 3. 稀疏矩阵的三元组表示 4. 稀疏矩阵的十字链表表示 5. 广义表 6. 广义表的存储结构及基本运算的实现 [项目1 - 猴子选大王(数组版)] 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后一只出圈的猴子为大王.输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号