数据结构之栈

一标准库stack的使用(1)stack成员函数(2)示例二C++实现栈数组实现的栈,能存储任意类型的数据

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

栈(stack)是限定仅在表尾进行插入和删除操作的线性表。其特点是:”
后进先出“或”
先进后出“。

一 标准库stack的使用

(1)stack成员函数

函数名 功能 复杂度
size() 返回栈的大小 O(1)
top() 返回栈顶元素 O(1)
push(x) 向栈中添加元素 O(1)
pop() 从栈中取出并删除元素 O(1)
empty() 在栈为空时返回ture O(1)

(2)示例

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

int main()
{
    stack<int> S;
    S.push(3);
    S.push(7);
    S.push(1);
    cout << S.size() << " ";
    cout << S.top() << " ";
    S.pop();
    cout << S.top() << " ";
    S.pop();
    cout << S.top() << " ";
    S.push(5);
    cout << S.top() << " ";
    S.pop();
    cout << S.top() << endl;

    return 0;
}

二 C++实现栈

  数组实现的栈,能存储任意类型的数据

#ifndef ARRAY_STACK_HXX
#define ARRAY_STACK_HXX

#include <iostream>
#include "ArrayStack.h"
using namespace std;

template<class T> class ArrayStack{
    public:
        ArrayStack();
        ~ArrayStack();

        void push(T t);
        T peek();
        T pop();
        int size();
        int isEmpty();
    private:
        T *arr;
        int count;
};

// 创建“栈”,默认大小是12
template<class T>
ArrayStack<T>::ArrayStack() 
{
    arr = new T[12];
    if (!arr) 
    {
        cout<<"arr malloc error!"<<endl;
    }
}

// 销毁“栈”
template<class T>
ArrayStack<T>::~ArrayStack() 
{
    if (arr) 
    {
        delete[] arr;
        arr = NULL;
    }
}

// 将val添加到栈中
template<class T>
void ArrayStack<T>::push(T t) 
{
    //arr[count++] = val;
    arr[count++] = t;
}

// 返回“栈顶元素值”
template<class T>
T ArrayStack<T>::peek() 
{
    return arr[count-1];
}

// 返回“栈顶元素值”,并删除“栈顶元素”
template<class T>
T ArrayStack<T>::pop() 
{
    int ret = arr[count-1];
    count--;
    return ret;
}

// 返回“栈”的大小
template<class T>
int ArrayStack<T>::size() 
{
    return count;
}

// 返回“栈”是否为空
template<class T>
int ArrayStack<T>::isEmpty()
{
    return size()==0;
}

#endif

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120156.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Origin绘图快速上手指南

    Origin绘图快速上手指南1、创建工程打开origin后,点击菜单栏“文件”,选择“项目另存为”,给项目命名,并存到某个工作路径。2、导入数据然后将excel中的数据(只要数据)选中后复制到Book1中,从第5行开始粘贴。可以在侧面打开“项目管理器”,给表格“Book1”重命名为“曲线数据”。还可以在表格的“长单位”处给每列数据加上标签。3、那么这时可以直接使用Origin的自动绘图功能了。选择A、B、C所有列,然后点击菜单栏的“绘图”,选择一个折线图,双击即可绘图。这样呢就是将两条曲线放到同一张图中了。如果想要自定

    2022年5月31日
  • 处理js乱码

    处理js乱码1.将time.js编码格式更改外2.在Tomcat设置VM-OPTION选项为-Dfile.encoding=utf-8

    2022年6月12日
  • HTML/CSS 常见面试题汇总

    HTML/CSS 常见面试题汇总HTML面试题1、<image>标签上title属性与alt属性的区别是什么?alt属性是为了给那些不能看到你文档中图像的浏览者提供文字说明的。且长度必须少于100个英文字符或者用户必须保证替换文字尽可能的短。这包括那些使用本来就不支持图像显示或者图像显示被关闭的浏览器的用户,视觉障碍的用户和使用屏幕阅读器的用户等。title属性为设置该属性的元素提供建议性的信息。使用ti…

    2022年5月31日
  • Cuda和cuDNN安装教程(超级详细)

    Cuda和cuDNN安装教程(超级详细)接下来我为大家带来超级详细的Windows10环境下cuda和cuDNN下载和安装方法:

    2022年6月14日
  • avc1 vs avc3 in fragment MP4 difference

    avc1 vs avc3 in fragment MP4 differenceAmendment2ofISO/IEC14496-15(AVCfileformat)isdefininganewstructureforfragmentedMP4called”avc3″.TheprincipaldifferencebetweenAVC1andAVC3isthelocationofthecodecinitialisationdata(e.g.SPS,PPS).InAVC1thisdataisplacedin.

    2022年10月17日
  • 建立数据库连接费时吗_数据库连接错误是什么原因

    建立数据库连接费时吗_数据库连接错误是什么原因相信很多朋友都遇到过WordPress提示“建立数据库连接时出错”这个问题,英文为“Errorestablishingadatabaseconnection”。[原创文章:www.777y.com]“建立数据库错误时出错”意味着由于某种原因,您的站点PHP代码无法与MySQL数据库连接以获取显示该页面所需的数据。[本文来自:www.777y.com]数据库连接出错的原因和处理方案数据库连接…

    2022年9月24日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号