链栈封装 C++

使用C++对链栈进行了简单的封装,实现了栈的基本操作

封装方法: pop(),top(),size(),empty(),push()

代码已经过测试

#pragma once
#include <iostream>
#include <algorithm>
using namespace std; template<class T>class LinkNode{
public:
T data;
LinkNode *pnext;
LinkNode *ppre;
};
template<class T>class Stack {
public:
Stack(); //构造函数
void pop(); //弹出头元素
void push(T value); //入栈
bool empty(); //判断是否为空栈
int size(); //返回栈的大小
T top(); //获取首元素
private:
LinkNode<T> *head;
LinkNode<T> *tail;
int len;
}; template<class T>
inline Stack<T>::Stack()
{
this->head = nullptr;
this->tail = nullptr;
this->len = 0;
} template<class T>
inline void Stack<T>::pop()
{
if (this->head == this->tail)
{
this->head = this->tail = nullptr;
this->len = 0;
return;
}
LinkNode<T> *p = this->tail;
this->tail = p->ppre;
this->tail->pnext = nullptr;
free(p);
p = nullptr;
this->len--;
} template<class T>
inline void Stack<T>::push(T value)
{
LinkNode<T> *newnode = new LinkNode<T>;
newnode->data = value;
if (this->len == 0)
{
this->head = newnode;
this->tail = newnode;
this->len++;
}
else {
tail->pnext = newnode;
newnode->ppre = tail;
this->tail = newnode;
this->len++;
}
} template<class T>
inline bool Stack<T>::empty()
{
if (this->len == 0)
return true;
else return false;
} template<class T>
inline int Stack<T>::size()
{
return this->len;
} template<class T>
inline T Stack<T>::top()
{
return T(this->tail->data);
}

如果大家有什么疑问的话可以加qq向我提出哦,欢迎各位大佬指出问题。

如果你觉得对你有所帮助的话就给我点个赞,点燃我下次写文章的动力吧 _ !

数据结构 - 链栈的实现 C++的更多相关文章

  1. 数据结构 - 链栈的实行(C语言)

    数据结构-链栈的实现 1 链栈的定义 现在来看看栈的链式存储结构,简称为链栈. 想想看栈只是栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢?由于单链表有头指针,而栈顶指针也是必须的,那干吗不让它 ...

  2. 数据结构——链栈(link stack)

    /* linkStack.c */ /* 链栈 */ #include <stdio.h> #include <stdlib.h> #include <stdbool.h ...

  3. C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)

    /**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋 ...

  4. C#数据结构-链栈

    上一篇我们通过数组结构实现了栈结构(准确的说是栈的顺序存储结构),现在我们通过链(单链)存储栈,也就是链栈. 通常对于正向单链表来说,是从头节点开始,在链的尾部附加节点,前一个节点的指针指向附加节点: ...

  5. 算法与数据结构(二) 栈与队列的线性和链式表示(Swift版)

    数据结构中的栈与队列还是经常使用的,栈与队列其实就是线性表的一种应用.因为线性队列分为顺序存储和链式存储,所以栈可以分为链栈和顺序栈,队列也可分为顺序队列和链队列.本篇博客其实就是<数据结构之线 ...

  6. 【Java】 大话数据结构(6) 栈的顺序与链式存储

    本文根据<大话数据结构>一书,实现了Java版的栈的顺序存储结构.两栈共享空间.栈的链式存储机构. 栈:限定仅在表尾进行插入和删除操作的线性表. 栈的插入(进栈)和删除(出栈)操作如下图所 ...

  7. 【C#】【数据结构】006-栈:链栈

    C#数据结构:链栈 1.自定义链栈结构: 链栈节点类 using System.Collections; using System.Collections.Generic; using UnityEn ...

  8. java与数据结构(6)---java实现链栈

    栈之链式存储结构链栈 链栈 栈的链式存储结构成为链栈.链栈是没有头结点,头结点就是栈顶指针top. 代码结构 package list; public interface Stackable;公共接口 ...

  9. 数据结构——Java实现链栈

    一.分析 栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表. 链栈是指采用链式存储结构实现的 ...

随机推荐

  1. nuget安装说明

    1.先百度安装nuget.server 比如 https://www.cnblogs.com/tomfang/articles/3999303.html 2.官网下载nuget.exe nuget p ...

  2. linux 查看用户列表

    cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"| ...

  3. 论文阅读: Infrastructure-Based Calibration of a Multi-Camera Rig

    Abstract 在线标定很重要. 但是目前的方法都计算量都很高. 我们的方案不需要标定板之类的东西. 我们的方案不需要假设相机有重合的FOV,也不需要任何的初始猜测. 当相机模组行驶穿过之前建过地图 ...

  4. Zookeeper 运维实践手册

    Zookeeper是一个高可用的分布式数据管理与协调框架,该框架能很好地保证分布式环境中数据一致性.一般用来实现服务发现(类似DNS),配置管理,分布式锁,leader选举等. 一.生产环境中Zook ...

  5. Vue.js 源码分析(十四) 基础篇 组件 自定义事件详解

    我们在开发组件时有时需要和父组件沟通,此时可以用自定义事件来实现 组件的事件分为自定义事件和原生事件,前者用于子组件给父组件发送消息的,后者用于在组件的根元素上直接监听一个原生事件,区别就是绑定原生事 ...

  6. Linux 安装Redis4.0.8【yum安装】

    .下载yum源 yum install epel-release2.安装redisyum install redis3.启动redis # 启动redis service redis start # ...

  7. java线程锁基础

    定义运行方法 package com.company; // 包名import java.util.concurrent.locks.ReentrantLock;import java.util.co ...

  8. maven打包产生可执行jar包

    http://blog.csdn.net/u014695188/article/details/53128095 https://blog.csdn.net/fuck487/article/detai ...

  9. php 获取一张图片所有点的颜色值,感觉不错转载学习

    片段一 //similar_text($numStr, $val, $pre); //计算两个字符串的相似度 //print_r($pre); $imgPath = 'time.jpg'; $size ...

  10. MVC+Ninject+三层架构+代码生成 -- 总结(七、顯示層 一)

    1.顯示層 在網上找的 Bootstrap 模板.