C++中 栈的简单封装

/*******************
 *      Stack	   *
 * *****************/
#include <iostream>

using namespace std;

/***************************定义***************************************/
class Stack
{
    public:
	Stack(int capacity = 5);
	virtual ~Stack();

	bool push(int v);//返回是否入栈成功
	bool pop(int *p = NULL);//返回出栈是否成功,成功则返回p [变相返回]

	bool empty();//判断是否空栈
	bool full();//判断是否栈满
    private:
	int * pdata;//存放数据
	int capacity;//定义栈大小
	int top;
};

/***************************构造函数************************************/
Stack::Stack(int capacity)
{
    this->capacity = capacity;
    pdata = new int[capacity];//不需要*sizeof[int]
    top = 0;
}

/***************************析构函数************************************/
Stack::~Stack()
{
    if(NULL!=pdata)
    {
	delete [] pdata;
    }
    pdata = NULL;
}

/***************************进栈函数************************************/
bool Stack::push(int v)
{
    if(full())//stack is full
    {
	cerr<<"stack is full."<<endl;
	return false;
    }
    cout<<"Stack push "<<v<<endl;
    pdata[top++] = v;//简化
}

/***************************出栈函数************************************/
bool Stack::pop(int * p)
{
    if(top <= 0)//if(empty())
    {
	cerr<<"stack is empty."<<endl;
	return false;
    }
    if(NULL!=p)
    {
	*p = pdata[top-1];
    }
    cout<<"stack pop "<<pdata[top-1]<<endl;
    top--;
    return true;
}

/***************************判空函数************************************/
bool Stack::empty()
{
    if(top<=0)
    {
	return true;
    }
    return false;
}

/***************************判满函数************************************/
bool Stack::full()
{
    if(top>=capacity)
    {
	return true;
    }
    return false;
}

/***************************测试函数************************************/
int main(int argc,char **argv)
{
    Stack s;
    int i = 0;

    s.push(1);
    s.push(2);
    s.pop();
    s.push(3);
    s.push(4);
    s.push(5);
    s.push(6);
    s.push(7);

    cout<<endl<<endl;
    for(;i<7;i++)
    {
	s.pop();
    }

    return 0;
}

C++中 栈的简单封装

时间: 2024-10-10 10:57:14

C++中 栈的简单封装的相关文章

vue中axios请求简单封装

1.http.js /**axios封装 * 请求拦截.相应拦截.错误统一处理 */ import axios from 'axios'; import QS from 'qs'; import { Toast } from 'vant'; import store from '../store/index' // 环境的切换 if (process.env.NODE_ENV == 'development') { axios.defaults.baseURL = '/api'; } else

okhttp3 get post 简单封装

最近打算在新项目中使用 okhttp3, 简单封装了一下异步 get post 因为 CallBack 也是在子线程中执行,所以用到了 Handler public class MyOkHttpClient { private static MyOkHttpClient myOkHttpClient; private OkHttpClient okHttpClient; private Handler handler; private MyOkHttpClient() { okHttpClien

孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4

(完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十一天. 今天继续学习mongoDB的简单操作,并继续对一些可能反复经常使用的操作进行简单的封装. 今天成功了解并实测完成了向mongoDB数据库中删除记录的操作,详细学习过程见屏幕录屏学习过程. 一.首先解决了昨天没有解决的修改记录的问题 今天花了一定的时间认真看相关资料,发现在修改记录时: [方法一]: 集合对象.update({查询记录的筛选条件字典},{要修改的字段的信息},True) 这种方法与下面的方法结果 是

孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5

孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5并学习权限设置 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十二天. 今天继续学习mongoDB的简单操作,并继续对一些可能反复经常使用的操作进行简单的封装.同时通过搜索了解了如何对本地Mongo数据库进行权限设置(没有实践本地数据库的用户权限设置.) 按个人规划,今天是初步了解学习MongoDb数据库的最后一个学习日,后续将在真正使用此数据库时,再对其进行深入研究. 一.今天完成了两个可

Android中网络框架的简单封装

个人博客 http://www.milovetingting.cn Android中网络框架的简单封装 前言 Android作为一款主要应用在移动终端的操作系统,访问网络是必不可少的功能.访问网络,最基本的接口有:HttpUrlConnection,HttpClient,而在后续的发展中,出现了Volley,OkHttp,Retrofit等网络封装库.由于各种原因,在实际的项目开发中,我们可能会需要在项目的版本迭代中,切换网络框架.如果对于网络框架没有好的封装,那么当需要切换网络框架时,可能就会

C++中template的简单用法

模板(Template)指C++程序设计设计语言中采用类型作为参数的程序设计,支持通用程序设计.C++ 的标准库提供许多有用的函数大多结合了模板的观念,如STL以及IO Stream.使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数.返回值取得任意类型. 一.函数模板 在c++入门中,很多人会接触swap(int&, int&)这样的函数类似代码如下: 1 void swap(int&a , int& b) { 2 int temp

Android ToolBar 的简单封装

使用过 ToolBar 的朋友肯定对其使用方法不陌生,因为其用法很简单,如果对 ActionBar 使用比较熟练的人来说,ToolBar 就更容易了!不过,相信大家在使用的过程中都遇到过这样一个问题,需要在每一个我们要使用的 xml 中添加 ToolBar 这个控件,比如我需要在 MainActivity中使用 ToolBar,则他的 xml 文件需要这样写, <RelativeLayout xmlns:android="http://schemas.android.com/apk/res

ffmpeg学习4--ffmpeg类的简单封装,包含解码和定时录像功能

ffmpeg学习4--ffmpeg类的简单封装,包含解码和定时录像功能 参考网上的资料,简单封装了一下ffmpeg,这里记录一下,其它传感器编码及项目中用到的已经抽离,这里只包含解码和录像部分.这只是个玩具级别的测试.完整测试代码下载:代码下载 ffmpegDeCode.h #pragma once #include "stdafx.h" #include<iostream> using namespace std; extern char *VideoPath; exte

简单封装MySQLdb模块操作MySQL数据库

python连接mysql的connector有很多,我们选择MySQLdb 让python支持MySQLdb模块 #pip2.7 install MySQL-python 查看python2.7可使用的模块是否存在MySQLdb # ipython WARNING: IPython History requires SQLite, your history will not be saved Python 2.7.11 (default, Mar 10 2016, 09:45:30)  Typ