`

栈-链栈

阅读更多
LinkedStack.h
#ifndef LINKEDSTACK_H
#define LINKEDSTACK_H

#include<iostream>
#include"../T2/LinkedList.h" //LinkNode
#include"Stack.h"
using namespace std;

template<typename T>
class LinkedStack:public Stack<T>{
public:
    LinkedStack():top(NULL){}
    ~LinkedStack(){makeEmpty();}
    void Push(const T &x);
    bool Pop(T &x);
    bool getTop(T &x) const;
    bool IsEmpty() const{
        return top==NULL?true:false;
    }
    bool IsFull() const{
        return false;
    }
    int getSize() const;
    void makeEmpty();
    friend ostream& operator<<(ostream& os,LinkedStack<T>& s){
        LinkNode<T> *p = s.top;
        while(NULL!=p){
            cout << p->data << " ";
            p = p->link;
        }
        cout << endl;
        return os;
    }

private:
    LinkNode<T> *top;
};
#endif // LINKEDSTACK_H



#include"LinkedStack.h"
#include<assert.h>

template<typename T>
void LinkedStack<T>::makeEmpty()
{
    LinkNode<T> *p;
    while(NULL!=top){
        p = top;
        top = top->link;
        delete p;
    }
}

template<typename T>
void LinkedStack<T>::Push(const T &x)
{
    top = new LinkNode<T>(x,top);
    assert(NULL!=top);
}

template<typename T>
bool LinkedStack<T>::Pop(T &x)
{
    if(IsEmpty()){
        return false;
    }else{
        x = top->data;
        LinkNode<T>* p;
        p = top;
        top = top->link;
        delete p;
        return true;
    }
}

template<typename T>
bool LinkedStack<T>::getTop(T &x) const
{
    if(IsEmpty()){
        return false;
    }else{
        x = top->data;
        return true;
    }
}

template<typename T>
int LinkedStack<T>::getSize() const
{
    if(IsEmpty()){
        return 0;
    }else{
        int size = 0;
        LinkNode<T> *p = top;
        while(NULL!=p){
            p = p->link;
            size++;
        }
        return size;
    }
}

int main()
{
    LinkedStack<int> ls;
    for(int i=0;i<10;++i){
        ls.Push(i);
    }
    cout << ls;
    cout << ls.getSize() << endl;
    int num;
    for(int i=0;i<5;++i){
        ls.Pop(num);
    }
    cout << ls;
}

9 8 7 6 5 4 3 2 1 0 
10
4 3 2 1 0 

分享到:
评论

相关推荐

    算法-理论基础- 栈- 链栈(包含源程序).rar

    在本压缩包文件“算法-理论基础- 栈- 链栈(包含源程序).rar”中,我们可以深入学习栈的理论基础以及链栈的具体实现,同时通过源程序加深理解。 首先,我们要了解栈的基本概念。栈是一种线性数据结构,它的主要...

    数据结构实验报告--链栈编写迷宫.doc

    数据结构实验报告--链栈编写迷宫.doc

    C++模版类实现顺序栈、链栈

    本项目中,模版类被用来实现两种常见的数据结构——顺序栈和链栈,这两种栈都遵循后进先出(LIFO)的原则。下面我们将详细探讨这些知识点。 首先,**顺序栈**是基于数组实现的栈。在C++中,可以定义一个名为`...

    反序输出- 链栈

    与传统的数组栈不同,链栈使用链表作为底层数据结构,而不是连续的内存空间。这种设计使得链栈在处理动态变化的数据量时更加灵活。 在链栈中,元素的插入(压栈)和删除(弹栈)操作并不像数组栈那样受限于栈顶索引...

    Java算法实例-链栈和顺序栈操作

    本实例主要探讨的是栈(Stack)这一数据结构,特别是链栈(Linked Stack)和顺序栈(Sequential Stack)的操作。 栈是一种后进先出(Last In First Out, LIFO)的数据结构,它在处理递归、表达式求值、函数调用等...

    数据结构课程:顺序栈和链栈的实现

    ### 数据结构课程:顺序栈和链栈的实现 #### 栈的基本概念 栈是一种特殊的线性表,其特殊之处在于所有元素的插入和删除都只能在一端进行,这一端被称为栈顶(top),与之相对的一端称为栈底(bottom)。栈通常支持以下...

    数据结构(C语言) - 表达式求解 - 链栈

    链栈是一种基于链表实现的栈,与数组栈不同,链栈在动态扩展和内存管理上具有更大的灵活性。 链栈由一系列节点组成,每个节点包含一个数据元素(在这里是表达式的操作数或运算符)和指向下一个节点的指针。栈的基本...

    数据结构实验-括号匹配的检验-链栈实现

    括号匹配问题是编程语言编译器在进行语法分析时经常遇到的问题,通过该实验,学生不仅能够学习到链栈的基本操作方法,还能进一步了解栈在实际应用中的重要作用。 #### 实验原理与背景知识 1. **栈的概念**: - 栈...

    顺序栈、链栈将10进制转为2、8、16进制源码

    本话题聚焦于一种特定的应用——使用C++实现的顺序栈和链栈,将10进制数转换为2、8、16进制。这里我们将深入探讨顺序栈和链栈的概念,以及它们如何应用于不同进制之间的转换。 首先,顺序栈是一种基于数组的数据...

    顺序栈和链栈操作

    本主题主要探讨两种常见的栈实现:顺序栈和链栈。栈是一种特殊的线性数据结构,遵循“后进先出”(LIFO)的原则,即最后入栈的元素最先出栈。 首先,我们来详细了解一下顺序栈。顺序栈是用一维数组来实现的栈,其...

    栈,链栈.zip

    栈和链栈是数据结构中的两种基本操作机制,它们在计算机科学中扮演着重要的角色,尤其是在算法设计和程序实现中。栈是一种后进先出(Last In First Out, LIFO)的数据结构,而链栈是栈的一种具体实现方式,利用链式...

    顺序栈与链栈的实现

    顺序栈与链栈的实现 本文将详细介绍顺序栈和链栈的实现,包括它们的数据结构、操作和应用。 一、顺序栈 顺序栈是一种基于数组的栈实现,它使用一个数组来存储栈中的元素。顺序栈的优点是访问速度快、实现简单,...

    顺序栈、链栈的插入和删除实验报告.pdf

    顺序栈和链栈的插入和删除实验报告 一、顺序栈和链栈的概念 顺序栈是一种线性数据结构,它使用数组来存储元素,每个元素按照顺序存储在数组中。链栈是一种链式数据结构,它使用链表来存储元素,每个元素都是一个...

    会定义顺序栈和链栈的结点类型

    1、 会定义顺序栈和链栈的结点类型。 2、 掌握双向栈的结构特点及其在一维数组中的实现。 3、 掌握在双向栈中进行插入和删除元素的方法。 二、 实验要求 1、 定义栈的存储结构。 2、 编写程序实现双向栈的基本操作...

    数据结构-栈的应用:顺序栈与链栈的应用

    在这个主题中,我们将专注于栈(Stack)这一特殊的数据结构,及其在实际应用中的两种主要实现方式:顺序栈(Sequential Stack)和链栈(Linked Stack)。栈通常被称为“后进先出”(LIFO,Last In First Out)的数据...

    C++数据结构实验_实现共享栈,链栈,循环队列,链队列

    在这个实验中,我们将关注四种特定的数据结构:共享栈、链栈、循环队列和链队列。这些数据结构在各种算法和应用程序中都有广泛应用。 首先,我们来看共享栈(Shared Stack)。共享栈是一种特殊的栈,其中多个线程...

    数据结构实验二——顺序栈,链栈,循环队列,链队列.pdf

    本实验主要探讨了四种数据结构:顺序栈、链栈、循环队列和链队列,这些都是在编程实践中常用的抽象数据类型。 1. **顺序栈**: - 顺序栈是一种线性数据结构,其元素在内存中连续存放,类似于数组。栈的特点是...

    C语言 栈的实现,包含顺序栈和链栈,亲测可用

    本文将详细讨论在C语言中如何实现栈,包括顺序栈和链栈,并基于提供的文件名来解析它们的实现。 1. **顺序栈**:顺序栈是通过数组来实现的,其优点在于存储空间连续,访问速度快。`stack_array.c`和`stack_array.h`...

    lianzhan.rar_栈_链栈

    文件"链栈 (2).doc"可能包含了更详细的解释,比如链栈的其他操作,如合并两个链栈、查找某个元素在栈中的位置等,或者对链栈在实际问题中的应用,如表达式求值、深度优先搜索等。这些扩展功能和应用场景进一步展示了...

Global site tag (gtag.js) - Google Analytics