c++:用顺序表实现简单的栈

main.cpp

#include<iostream>

#include<string>

#include"Stack.hpp"

using namespace std;

void test1(){                     //测试

Stack<int> s1;

s1.Push(1);

s1.Push(2);

s1.Push(3);

s1.Push(4);

s1.Pop();

s1.Pop();

s1.Pop();

s1.Pop();

}

int main(){

test1();

return 0;

}

Stack.hpp

#pragma once

template <class T>            //使用模板可以实现多种类型栈操作

class Stack{

private:

T* _array;           //数据结构

size_t _capacity;     //入栈个数

int _topindex;     //栈空/满的判断标准

public:

Stack()

:_array(0)

, _capacity(0)

, _topindex(-1)

{}

void Push(const T& x){           //入栈

if (_topindex + 1 == _capacity){     //判断是否需要开辟空间

_capacity = 2 * _capacity + 3;

T* tmp = new T(_capacity);

if (tmp == NULL){

cout << "failed new" << endl;

exit(-1);

}

memcpy(tmp, _array, sizeof(T)*(_topindex + 1)); //内置类型使用

delete _array;                                 // memcpy ,自定义

_array = tmp;                                 //使用for循环逐个拷贝

}                                                    //注意深拷贝和前拷贝

_array[++_topindex] = x;

}

void Pop(){                          //出栈

if (_topindex > -1){

cout << _array[_topindex] << endl;

_topindex--;

}

}

bool empty(){           //清空栈

return _topindex = -1;

}

};

时间: 2024-10-06 06:52:29

c++:用顺序表实现简单的栈的相关文章

DS之顺序表实现输入数据逆置

实现输入数据逆置和顺序表实现排序是两个极其相似的过程,因此使用的顺序表的基本操作也是一样的:0基本操作前的准备,1初始化顺序表,6向顺序表插入数据元素. 要想实现输入数据元素的逆置还需要一个逆置函数,逆置函数在C++,C#语言中早已接触过,因此不陌生,记得在做大量的C++的程序代码补充的大题就写过不下数十遍,挺简单的掌握技巧,就是你输入数据的个数的一半,前后进行交换,因此逆置函数的代码为: <span style="font-size:18px;">//逆置函数 void

用顺序表实现一个循环队列

队列是一种先进先出的线性表,简称FIFO.允许插入的一端为队尾,允许出列的一端为队头. 比如一个队列q=(p1,p2,p3,p4...pn),p1就是那个队头,pn就是队尾.出列时总是从p1开始 向后,入列时总是从pn后面插入.就像敲键盘,依次敲qwr,屏幕上显示的就是qwr,先敲的先显 示. 以下代码是用顺序表实现一个循环队列 1 /** 2 * @filename queue.c 3 * @author haohaibo 4 * @data 2017/4/12 5 * @brief 用顺序表

DS之顺序表实现乱序输入顺序输出

顺序表的实例有很多,在学其他的编程语言时,肯定都学过要求输入一串乱序的数字,要求进行排序,实现升序或降序输出.今天就来用顺序表实现乱序输入,顺序输出(升序). 实现上述的功能需要用到的顺序表的基本操作有0基本操作前的准备,1初始化顺序表,6向顺序表插入数据元素. 自己只需写一个排序的函数,排序函数的代码为: <span style="font-size:18px;">//排序函数 void paixu(SqList &L) { for(int i=0;i<L.

利用数组创建的顺序表实现各种功能

主函数main.c #include "func.h" #define MAXSIZE 100 INT32 main( void ) { INT32 temp[MAXSIZE] = {NULL}, f = 0, OSM = 1; OSM = create_SL (temp); do { OSM = OSM_Printf("\n\t========================================\n"); OSM = OSM_Printf("

各路大神大显神通!帮帮忙如何使用顺序表实现以下任务

5r0lp9k32a伟矢汗仲颐窍郊系拖脑<http://weibo.com/p/230927987720190915518464> aki6we5yzu占麓仕掩妒辖枚睬啥刭<http://weibo.com/p/230927987720126407122944> vxbanbazps律男烁稳倮酝肺肺苫捶<http://weibo.com/p/230927987723046619975680> n3o87qg51q刀纺芈徽萍炙泊偬切塘<http://weibo.co

用顺序表实现求两个集合的并集

#include<iostream.h> #include<malloc.h> #include<limits.h> #include<string.h> #include<stdlib.h> #include<ctype.h> #include<stdlib.h> #include<process.h> #define OK 1 #define INIT_LiST_SIZE 100//顺序表的初始长度 #de

C++模板实现动态顺序表(更深层次的深浅拷贝)与基于顺序表的简单栈的实现

前面介绍的模板有关知识大部分都是用顺序表来举例的,现在我们就专门用模板来实现顺序表,其中的很多操作都和之前没有多大区别,只是有几个比较重要的知识点需要做专门的详解. 1 #pragma once 2 #include<iostream> 3 #include<string> 4 #include<stdlib.h> 5 using namespace std; 6 7 template <class T> 8 class Vector 9 { 10 publ

hdu-1237简单计算器(栈的运用)

http://acm.hdu.edu.cn/showproblem.php?pid=1237 简单的栈的运用. 首先将数字和运算符分离,分别保存在两个数组中,然后按原来的式子的顺序,首先将第一个数和第一个运算符分别压 如个自的栈,然后判取出两个栈头部的元素,判断符号,如果是乘除就用当前数值乘取出的数字(优先),然后将乘后的数压入栈, 如果是加则将数和取出的数按原序入栈,如果减,就把新的数变负,将数和取出的数按原序入栈. 最后栈中所有元素的和就是结果. 1 #include<stdio.h> 2

数据结构之哈希表实现浅析

看了下JAVA里面有HashMap.Hashtable.HashSet三种hash集合的实现源码,这里总结下,理解错误的地方还望指正 HashMap和Hashtable的区别 HashSet和HashMap.Hashtable的区别 HashMap和Hashtable的实现原理 HashMap的简化实现MyHashMap HashMap和Hashtable的区别 两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全Hashtable的实现方法里面都添加了synchron