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

代码是在链表的二次封装,先阅读底层实现更佳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. 《深入理解Java虚拟机》(三)类加载机制

    @ 目录 1.什么是类的加载 2.类加载的过程 加载 连接 验证 文件格式验证 元数据验证 字节码验证 符号引用验证 准备 解析: 类或接口的解析 字段解析 类方法解析 接口方法解析 初始化 结束生命 ...

  2. 【架构师视角系列】QConfig配置中心系列之Client端(二)

    目录 声明 配置中心系列文章 一.架构 一.客户端架 1.Server 职责 (1)配置管理 (2)配置发布 (3)配置读取 2.Client 职责 (1)配置拉取 (2)配置注入 (3)配置变更监听 ...

  3. go值接收者和指针接收者的区别

    方法的接收者 package main import ( "fmt" ) type Person struct { Name string Age int } func (p Pe ...

  4. 【Azure Redis 缓存】Azure Cache for Redis 是否记录具体读/写(Get/Set)或删除(Del)了哪些key呢?

    问题描述 在Azure Redis的门户活动日志中,可以查看到的是对于Redis资源本身的操作.但是对于客户端连接到Redis服务后,对服务所做出的读写,或删除操作,是否有日志可以查看到呢? 问题回答 ...

  5. 用 nebula_dart_gdbc 在移动设备玩图数据库,泰酷辣!

    nebula_dart_gdbc,是访问 NebulaGraph 的 Dart 语言客户端,在 dart_gdbc 的规范下进行开发. dart_gdbc 是一套使用 Dart 语言定义的图数据库标准 ...

  6. [C++] 进程注入dll版

    目录 前言 前提 原理 代码 一些问题 前言 这几天在弄进程注入的事情,一直做不出来直接的进程注入,也就是不要dll的注入.因为dll注入据说容易触发杀软,但是弄了两天没弄出来.代码明明不报错,目标进 ...

  7. BeanShell Sample 如何使用?

    一 引入: eanShell Sample主要用于生成一些逻辑复杂的数据,例如用于加解密数据: **每次调用前重置bsh.Interpreter:每个BeanShell副本都有自己的解释器副本(每个线 ...

  8. Java 自定义数组的工具类

    1 /** 2 * 3 * @Description 自定义数组的工具类 4 * @author Bytezero·zhenglei! Email:420498246@qq.com 5 * @vers ...

  9. jquery ui autocomplete ajax返回数据自定义显示

    1.body里面的内容 <input type="text" class="inputTxt" id="txtJigou" autoc ...

  10. Java解析JSON数据,有回车符\n时解析报错

    一.问题由来 测试人员最近在测试时,后台日志一直抱错,大致意思是JSON数据解析错误,错误信息如下: 二.问题分析 去查看代码时,发现异常信息是这里抛出来的,解析时使用的是json-lib这个包中的方 ...