C++算法之 写自己的栈stack 动态申请

myStack。h

#pragma once
//typedef int TYPE;

template<typename TYPE>
class myStack
{
	TYPE* m_pData;//用new在堆上动态建立
	int m_nTop;
	int m_nCount;
public:
	bool isFull()
	{
		return m_nTop+1 >= m_nCount;

	}
	bool isEmpty()
	{
		if (m_nTop < 0)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	void push(const TYPE &data)
	{
		if (isFull())
		{
			return;
		}
		m_pData[++m_nTop] = data;
	}

	bool pop(TYPE& t)
	{
		if (isEmpty())
		{
			return false;
		}

		t = m_pData[m_nTop];
		m_nTop--;
		return true;
	}
	myStack(int nCount = 8);
	~myStack();

};

myStack。cpp

#include "stdafx.h"
#include "myStack.h"

template<typename TYPE>
myStack<TYPE>::myStack(int nCount) //缺省参数值只在头文件当中出现
{
	m_nCount = nCount;
	m_pData = new TYPE[nCount];
	m_nTop = -1;
}

template<typename TYPE>
myStack<TYPE>::~myStack(void)
{
	delete []m_pData;
}

main.cpp

// Stack2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "myStack.h"
#include "myStack.cpp"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	myStack<int> stack(4);
	int i = 0;
	while (i < 4)
	{
		stack.push(i);
		++i;
	}
	int t;
	while (stack.pop(t))
	{

		cout<<t<<endl;

	}
	getchar();
	return 0;
}

上次是用数组直接申请,这个是用new动态申请,这个方便在构造函数当中指定申请多大的内存。

时间: 2024-10-07 14:10:38

C++算法之 写自己的栈stack 动态申请的相关文章

[ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 2442+1442)

再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个阶段再去探究具体的实现,以及对基本结构的改造! C++标准库中 这里记录一个经典的关于栈和队列的面试题目: 题目:实现一个栈,带有出栈(pop),入栈(push),取最小元素(getMin)三个方法.要保证这三个方法的时间复杂度都是O(1). 思路:重点是getMin()函数的设计,普通思路是设计一

014写程序将一个栈按升序排序,对这个栈是如何实现的,你不应该做任何特殊的假设(keep it up)

写程序将一个栈按升序排序.对这个栈是如何实现的,你不应该做任何特殊的假设. 程序中能用到的栈操作有:push | pop |isEmpty 最容易想到的就是优先队列来做此题,容易实现. 另外我们可以再用一个栈来实现栈的升序排列. 优先队列: //优先队列来实现 void sortStack(std::stack<int>& vStk) { std::priority_queue<int, std::vector<int>, std::greater<int>

(转)堆heap和栈stack

一 英文名称 堆和栈是C/C++编程中经常遇到的两个基本概念.先看一下它们的英文表示: 堆――heap 栈――stack 二 从数据结构和系统两个层次理解 在具体的C/C++编程框架中,这两个概念并不是并行的.深入到汇编级进行研究就会发现,栈是机器系统提供的数据结构,而堆是由C/C++函数库提供的.这两个概念可以从数据结构和系统两个层次去理解: 1.从数据结构层次理解,栈是一种先进后出的线性表,只要符合先进后出的原则的线性表都是栈.至于采用的存储方式(实现方式)是顺序存储(顺序栈)还是链式存储(

C语言算法系列---1.队列和栈

写在前面:在家玩了好久,实在是不知道干嘛了,突然想找些事做,现在是时候做些什么了.这些东西不见得多高深,也可能很简单,但很基础,也无法忽视.同时,也是自己学习走过的一条路. 这是开头,就写写C的队列和栈的一些算法吧. 首先是栈的一些基础功能的实现,先贴代码: #include<stdlib.h> #include<stdio.h> typedef int SElemType; //声明栈元素类型为int typedef int Status; //函数返回值的类型为int #def

【STL】栈stack

栈stack 头文件与定义 #include<stack> stack<long long>mystack;    //以下以mystack为例 用法 1.将元素a入栈:mystack.push(a); 2.将栈顶元素弹栈/出栈:mystack.pop(); 3.判断栈是否为空:mystack.empty() 4.栈的长度:cout<<stack.size(); 5.访问栈顶元素:cout<<stack.top(); 注意事项 1.在出栈或者访问栈顶元素之前

bss段、data段、text段、堆(heap) 和 栈(stack)

bss段: bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域. bss是英文Block Started by Symbol的简称. bss段属于静态内存分配. data段: 数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域. 数据段属于静态内存分配. text段: 代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域. 这部分区域的大小在程序运行前就已经确定,并且内存

堆(heap)和栈(stack)几点认识

堆(heap)和栈(stack)主要的区别由以下几点:1.管理方式不同:2.空间大小不同:3.产生碎片不同:4.生长方向不同:5.分配归属不同:6.分配效率不同:7.存取效率不同:管理方式:对于栈来讲,释放是由程序自动管理,无需在程序中手工控制:对于堆来说,释放工作由程序员控制,容易产生memory leak.产生碎片:对于堆来讲,频繁的new/delete,malloc/free势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低.对于栈来讲,则不会存在这个问题,因为栈是先进后出的队

堆heap和栈Stack(百科)

堆heap和栈Stack 在计算机领域,堆栈是一个不容忽视的概念,堆栈是两种数据结构.堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除.在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场.要点:堆,队列优先,先进先出(FIFO—first in first out)[1]  .栈,先进后出(FILO—First-In/Last-Out). 目录 1 简介 2 对比分析 ? 堆栈空间分配 ? 堆栈缓存方式 ? 堆栈

算法学习 - 括号匹配(栈实现)C++

括号匹配是栈最典型的应用了. 其实思路很简单,就是遇到一个左括号就压栈,遇到一个右括号就弹栈,看是否匹配就好了.最后检查下栈里是不是有剩余的括号就行了. 上代码~: // // main.cpp // bracketMatch // // Created by Alps on 14-7-28. // Copyright (c) 2014年 chen. All rights reserved. // #include <iostream> #define ElementType char usi