链式栈:就是一种操作受限的单向链表,每次入栈一个元素,向链表中添加一个节点,出栈一个元素,释放一个节点。因为栈具有“后进先出”的特点,如果每次在链表的尾部进行插入和删除,就要遍历整个链表来找到尾节点。而在头部进行插入和删除时,只需根据头指针即可找到链表的首元素结点。而无需遍历链表。所以链式栈的出,入栈通过对链表进行头删和头插来实现。

代码是在链表的二次封装,先阅读底层实现更佳LinkedList

代码清单

LinkedListStack.h

#ifndef C___LINKEDLISTSTACK_H
#define C___LINKEDLISTSTACK_H
#include "LinkedList.h"
template<typename T>
class Stack {
public:
virtual int getSize()const = 0;
virtual bool isEmpty()const = 0;
virtual void push(T& e) = 0;
virtual T pop() = 0;
virtual T peek()const = 0;
}; template<typename T>
class LinkedListStack : public Stack<T> {
public:
LinkedListStack();
int getSize()const;
bool isEmpty()const;
void push(T&e);
T pop();
T peek()const;
void print()const;
private:
LinkedList<T>*list;
}; template<typename T>
int LinkedListStack<T>::getSize() const {
return list->getSize();
} template<typename T>
bool LinkedListStack<T>::isEmpty() const {
return list->isEmpty();
} template<typename T>
void LinkedListStack<T>::push(T& e) {
list->addFirst(e);
} template<typename T>
T LinkedListStack<T>::pop() {
return list->removeFirst();
} template<typename T>
T LinkedListStack<T>::peek()const {
return list->getFirst();
} template<typename T>
void LinkedListStack<T>::print() const {
std::cout << "Stack: size = " << list->getSize() << std::endl;
std::cout << "bottom ";
list->print();
std::cout << " top" << std::endl;
} template<typename T>
LinkedListStack<T>::LinkedListStack() {
list = new LinkedList<T>();
} #endif //C___LINKEDLISTSTACK_H

main.cpp

int LinkedListStack()
{
LinkedListStack<int>*ls = new LinkedListStack<int>();
for(int i = 0;i<10;++i)
{
ls->push(i);
ls->print();
}
cout<<"isEmpty()"<<ls->isEmpty()<<endl;
cout<<"getSize()"<<ls->getSize()<<endl;
cout<<"peek"<<ls->peek()<<endl;
cout<<"pop"<<ls->pop()<<endl;
ls->print();
return 0;
}

链表栈(LinkedListStack)的更多相关文章

  1. java——链表、链表栈 LinkedListStack、链表队列 LinkedListQueue

    LikedList: package Date_pacage; public class LinkedList<E> { public static void main(String[] ...

  2. C语言 复杂的栈(链表栈)

    //复杂的栈--链表栈 #include<stdio.h> #include<stdlib.h> #define datatype int//定义链表栈数据类型 //定义链表栈 ...

  3. Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现

    栈 / Stack 目录 链表栈 数组栈 栈是一种基本的线性数据结构(先入后出FILO),在 C 语言中有链表和数组两种实现方式,下面用 Python 对这两种栈进行实现. 1 链表栈 链表栈是以单链 ...

  4. 12.java链表栈和数组栈

    栈是一个先入后出的有序列表,栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表,一端为变化的一端,称为栈顶,另一端是固定的,称为栈底.先入的元素在栈底,最后放入的元素在栈顶,删除 ...

  5. bzoj 1098 办公楼biu —— 链表+栈

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1098 首先,没有连边的人一定得在一个连通块里: 先把所有人连成一个链表,然后从第一个人开始, ...

  6. 链表栈C语言实现

    #ifndef LINKSTACK_H_INCLUDED #define LINKSTACK_H_INCLUDED #include <stdlib.h> #include <std ...

  7. 链表栈的C语言实现

    #ifndef _CONST_H_#define _CONST_H_ #include <stdio.h>#include <stdlib.h> typedef enum { ...

  8. liststack——链表栈(procedure)

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include "list.h&q ...

  9. 剑指offer-反向遍历链表-栈和递归2种方法(一次性跑通)

  10. 算法入门 - 链表的实现及应用(Java版本)

    之前我们学习了动态数组,虽然比原始数组的功能强大了不少,但还不是完全纯动态的(基于静态数组实现的).这回要讲的链表则是正儿八经的动态结构,是一种非常灵活的数据结构. 链表的基本结构 链表由一系列单一的 ...

随机推荐

  1. 鸿蒙开发学习(二)之ArkUI

    目录 UI开发 布局 布局选择 布局位置 组件 容器组件 row.column RelativeContainer 列表 Tabs 子组件 页面路由 GitHub地址,欢迎star HmDemo: 鸿 ...

  2. 【系统选型】企业即时通讯(IM)软件调研及供应商对比评估

    企业即时通讯(IM)软件调研及供应商对比评估 1.概览 1.1 即时通讯 即时通讯(Instant messaging,简称IM)是一个终端服务,允许两人或多人使用网路即时的传递文字讯息.档案.语音与 ...

  3. redis-cluster 性能调优

    关闭RDB防止fork进程的内存溢出问题 save "" appendonly=yes 防止某个节点挂掉,整个cluster挂掉的问题 cluster-require-full-c ...

  4. 【Azure 应用服务】Azure Function (PowerShell) 执行时报错 "out of memory"

    问题描述 在Azure Function App服务中,创建一个PowerShell脚本的函数,遇见了OOM(Out Of Memory)的异常报错: 2022-01-10T07:44:37 Welc ...

  5. 手机使用termux部署alist(一起体验alist挂载云盘)

    termux安装alist 安装termux 软件Termux:https://f-droid.org/packages/com.termux/ pkg install vim pkg install ...

  6. 使用 Docker 部署 File Browser 文件管理系统

    1)File Browser 介绍 官网:https://filebrowser.org/ GitHub:https://github.com/filebrowser/filebrowser 今天为大 ...

  7. CodeGeeX vscode代码提示,智能问答

    CodeGeeX 官网 https://codegeex.cn/zh-CN/ CodeGeeX vscode代码提示,智能问答

  8. Spring boot返回时间与MySql数据库中不相同问题及解决方法

    最近做项目测试的发现,访问Url返回的时间与数据库中的不相同,环境是Spring boot+MyBatis+Mysql(阿里云服务器),经过一番折腾,得到了解决 问题描述 我是直接使用IDEA的数据库 ...

  9. 中国十大热门网站榜中榜/Alexa综合排名TOP10(2015)

    互联网企业是由网络为基础的经营,一般包括IT行业.电子商务.软件开发等. 商业时代催生网络时代兴起,互联网以其强大的信息存储.信息互通.信息处理等功能,风靡全世界,无处无有,轻松一点,信息就在你面前. ...

  10. buntu中查看网卡信息的基础知识

    ubuntunetworkexpress工具网络access Ubuntu 中,通常有线网卡为eth0,无线网卡则为wlan0,后续增加的以此类推(可能某些无线网卡型号命名为eth1,而非wlan0) ...