C++栈的实现(针对某种数据类型)

/*
1.判断栈是否为空
2.得到栈的长度
3.元素入栈
4.元素出栈
5.清空栈
6.栈顶元素
7.栈底元素
*/

栈的空间动态增加:

/*
 动态增加空间大小,而不是在初始化时,定义一个非常大的空间
 原理:
   注意:动态增加大小时,以原大小的两倍配置一块新的空间,
   然后将原内容拷贝过来, 并释放原空间,再将指针指向新的空间
  
 */

#include<iostream>
using namespace std;
#pragma once

class MyStack
{
public:
 MyStack(void);
 ~MyStack(void);
 void push(int elem);
 void pop(int& elem);
 void clearStack();
 bool isEmpty();
 int stackLength();
 void stackTraverse(bool isFromBottom);//元素的编历
 int begin(); //栈顶元素
 int back();  //栈底元素
private:
 int* m_pBuffer;//栈空间地址
 int m_iTop; //指向栈顶,同时确定栈中元素个数
 int m_iSize; //栈的初始大小

};

MyStack::MyStack(void)
{
 m_iTop = 0;
 m_iSize = 5;
 m_pBuffer = new int[m_iSize];
}

MyStack::~MyStack(void)
{
 delete[] m_pBuffer;
}

/*
 以下用到了动态增加空间大小,而不是在初始化时,定义一个非常大的空间
 原理:
   注意:动态增加大小时,以原大小的两倍配置一块新的空间,
   然后将原内容拷贝过来, 并释放原空间,再将指针指向新的空间
  
 */

void MyStack::push(int elem)
{
 if(m_iTop == m_iSize)
 {
  m_iSize *= 2;
  int* pTemp = new int[m_iSize];
  for(int i = 0;i < m_iTop; ++i)
  {
   pTemp[i] = m_pBuffer[i];
  }
  delete[] m_pBuffer;
  m_pBuffer = NULL;
  m_pBuffer = pTemp;

}
 m_pBuffer[m_iTop] = elem;
 m_iTop++;
}

void MyStack::pop(int& elem)
{
 m_iTop--;
 elem = m_pBuffer[m_iTop];

}

void MyStack::clearStack()
{
 m_iTop = 0;
}

bool MyStack::isEmpty()
{
 if(m_iTop == 0)
 {
  return true;
 }
 return false;
}

int MyStack::stackLength()
{
 return m_iTop;
}

void MyStack::stackTraverse(bool isFromBottom)
{
 //栈底开始遍历
 if(isFromBottom)
 {
  for(int i = 0;i < m_iTop;++i)
  {
  cout<<m_pBuffer[i]<<endl;
  }
 }
 else
 {
  for(int i = m_iTop-1;i >= 0;--i)
  {
  cout<<m_pBuffer[i]<<endl;
  }
 }

}

int MyStack::begin()
{
 return m_pBuffer[m_iTop-1];
}

int MyStack::back()
{
 return m_pBuffer[0];
}

调用:

MyStack* myStack =  new MyStack();
 for(int i = 0 ;i < 100; ++i)
 {
  myStack->push(i);
 }
 
 cout << myStack->stackLength() << endl;
 cout << myStack->begin() << endl;
 cout << myStack->back() << endl;
 myStack->stackTraverse(false);
 myStack->clearStack();

时间: 2024-10-07 20:30:20

C++栈的实现(针对某种数据类型)的相关文章

关于list中移除某种数据类型的方法

众所周知,list在不泛型的情况下是可以存放各种数据类型的,代码如下: 1 public static void main(String[] args) { 2 List list=new ArrayList<>(); 3 list.add("我是字符串"); 4 list.add(123); 5 list.add(new HashMap<>()); 6 System.out.println(list); 7 } 可以得到控制台的输出结果是: [我是字符串, 1

python全栈(五)基本数据类型

#数字比作猎人num = 123v = num.bit_length()print(v)#字符串:女巫name1 = 'shizhengwen'v1 = name1.upper()print(v1) name2 = 'laiying'v2 = name2.upper()print(v2) #整形,int#python3里,122333344,不管数字有多大,都是int类型#python2里,123344#长整形,long#python2里,12233444 long#========python

python全栈闯关--7-基础数据类型汇总、集合、深浅拷贝

1.str s = ' ' print(s.isspace()) # 如果字符串全是空格返回True 2.在循环一个列表时,最好不要删除列表中的元素 删除列表元素,得到的结果,往往不是预期的 例子1: lis = [11, 22, 33, 44, 55] # 循环开始后,按照索引递增,删除了前面的值,不会处理列表索引的位置 # 虽然没有报错,但是不是想要的结果 for i in lis: print("目前删除元素值为:%d " % i) print("值删除前:"

数据结构 : Hash Table

http://www.cnblogs.com/lucifer1982/archive/2008/06/18/1224319.html 作者:Angel Lucifer 引子 这篇仍然不讲并行/并发. Hash table,国内相当一部分书籍将其直译为哈希表,但博主本人喜欢称其为散列表. 散列表支持任何基于 Key-Value 对的插入,检索,删除操作. 比如在 .NET 1.x 版本下,我们可以这样使用: 10 namespace Lucifer.CSharp.Sample 11 { 12   

JVM学习(2)——技术文章里常说的堆,栈,堆栈到底是什么,从os的角度总结--转载http://www.cnblogs.com/kubixuesheng/p/5202561.html

转载自---http://www.cnblogs.com/kubixuesheng/p/5202561.html 俗话说,自己写的代码,6个月后也是别人的代码--复习!复习!复习!涉及到的知识点总结如下: 堆栈是栈 JVM栈和本地方法栈划分 Java中的堆,栈和c/c++中的堆,栈 数据结构层面的堆,栈 os层面的堆,栈 JVM的堆,栈和os如何对应 为啥方法的调用需要栈 属于月经问题了,正好碰上有人问我这类比较基础的知识,无奈我自觉回答不是有效果,现在深入浅出的总结下: 前一篇文章总结了:JV

成员变量,局部变量,栈,堆的关系

变量主要有类变量.成员变量.局部变量三种. 变量主要有类变量.成员变量.局部变量三种. 类变量的的格式如下 class ClassA: static int age; 也就是说,类变量是定义在类中(而不是方法中)并且有static 修饰的变量. 成员变量的格式如下: class ClassB: int age; 也就是说,成员变量是定义在类中,但是没有static 修饰的变量. 局部变量呢,则是定义在方法中的(注意:JAVA中不怎么用函数这种说法的).比如最常见的. class ClassC:

JavaScript系列----数据类型以及传值和传引用

1.简单数据类型 在JavaScript中简单数据类型分为5种.分别为 Undefined, Null,Boolean,Number,String. Undefined类型Undefined类型只有一个值,即特殊的undefined.在使用var对变量声明的时候,变量的值即被初始化为undefined.在使用typeof求得数据类型的时候,对于未声明的变量返回的总是undefined. Null类型Null也只有一个值得数据类型,其实质是一个指向空对象的指针.所以使用typeof操作的时候返回的

浅析栈与队列在java中的基本应用

一.前提 摘自java程序设计教程(华盛顿大学/斯坦福大学著,陈志等译)-机械工业出版社 1.1栈/队列基础 像线性表一样,栈与队列中存储一组有序的值.这类数据结构至少需要支持下面几种操作: 将值放入数据结构中(添加操作): 将值从数据结构中取出(删除操作): 检查数据结构中是否还有值(判断数据结构是否为空). 栈与队列很相似:都是以某种特定的顺序存储元素序列.栈是一种先进先出/LIFO(LAST IN FIRST OUT)的结构,也就是最后保存到结构中的元素会最先被访问.队列则是一种先进先出/

虚拟机中的运行时栈帧

每个人都知道,各种各样的动画视频,都是由一帧一帧图片连续切换结果的结果而产生的,其实虚拟机的运行和动画也类似,每个在虚拟机中运行的程序也是由许多的帧的切换产生的结果,只是这些帧里面存放的是方法的局部变量,操作数栈,动态链接,方法返回地址和一些额外的附加信息组成,在虚拟机中包含这些信息的帧称为"栈帧",每个方法的执行,在虚拟机中都是对应的栈帧在虚拟机栈中的入栈到出栈的过程.其中比较重要的一点时,如果虚拟机中同时有多个线程在执行,那么各个线程的栈帧都是相互独立,互不侵犯的,所以这也实现了局