`
东边日出西边雨
  • 浏览: 262707 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

栈的链式存储结构

 
阅读更多

    栈是一种特殊的顺序表,只是从一头进出而已。

 

    下面是一些链栈的基本操作。

 

/* linkstack.h */

#ifndef LINKSTACK_H_INCLUDED
#define LINKSTACK_H_INCLUDED

#include <iostream>
using namespace std;

#define TYPE int

typedef struct _Node {
    TYPE data;
    struct _Node* next;
} Node, *Pnode;

class LinkStack
{
private:
    Pnode base;
    Pnode top;
public:
    LinkStack();
    ~LinkStack();
    bool InitStack();
    void DestroyStack();
    bool ClearStack();
    bool StackEmpty();
    int StackLength();
    bool Pop(TYPE&);
    bool Push(TYPE);
    void StackTraverse();
};

#endif // LINKSTACK_H_INCLUDED
 
/* linkstack.cpp */

#include "linkstack.h"

LinkStack::LinkStack() {
    base = NULL;
    top = NULL;
}

LinkStack::~LinkStack() {
}

bool LinkStack::InitStack() {

    if (base) {
        cout<<"alarm! stack exist"<<endl;
        return false;
    }

    base = new Node;

    if (base) {
        top = base;
        return true;
    }

    return false;
}

void LinkStack::DestroyStack() {

    while (top) {
        Pnode p = top;
        top = top->next;
        delete p;
    }

    base = NULL;
}

bool LinkStack::ClearStack() {

    if (!base) {
        cout<<"alarm! stack not exist"<<endl;
        return false;
    }

    while (top != base) {
        Pnode p = top;
        top = top->next;
        delete p;
    }

    return true;
}

bool LinkStack::StackEmpty() {

    if (!base) {
        cout<<"alarm! stack not exist"<<endl;

    }

    //判断栈为空
    if ((top == base) && (top != NULL)) {
        return true;
    }

    return false;
}

int LinkStack::StackLength() {

    if (!base) {
        cout<<"alarm! stack not exist"<<endl;
        return 0;
    }

    int n = 0;
    Pnode p = top;
    while (p != base) {
        p = p->next;
        n++;
    }

    return n;
}

bool LinkStack::Push(TYPE data) {

    Pnode p = new Node;

    if (p) {
        p->data = data;
        p->next = top;
        top = p;
        return true;
    }

    return false;
}

bool LinkStack::Pop(TYPE &e) {

    if (top==base) {
        cout<<"error! operation fail, do not to Pop(), Maybe the STACK is empty or not exist"<<endl;
        return false;
    }

    e = top->data;

    Pnode p = top;
    top = top->next;

    delete p;
    return true;
}

void LinkStack::StackTraverse() {

    if (!base) {
        cout<<"alarm! stack not exist"<<endl;
        return;
    }

    Pnode p = top;

    while (p!=base) {
        cout<<p->data<<" ";
        p = p->next;
    }

    cout<<endl;
}
 

 

分享到:
评论

相关推荐

    数据结构栈链式存储结构

    在给定的文件列表中,"StackLink.cpp"很可能包含了栈链式存储结构的C++实现代码。通常,`.cpp`文件是用来编写C++源代码的。在这个文件中,可能定义了一个栈类,该类使用链表作为底层数据结构,包含push(入栈)、pop...

    线性表的顺序存储结构、链式存储结构上的基本操作

    同时,我们还会涉及栈这种特殊类型的线性表及其顺序和链式存储结构。 一、线性表的顺序存储结构 顺序存储结构是最简单也是最直观的一种数据存储方式,它将线性表中的元素依次存储在一片连续的内存空间中。每个元素...

    数据结构实验报告2线性表的链式存储结构.pdf

    本实验报告详细介绍了线性表的链式存储结构,通过编程实践深入理解了链表的逻辑结构、基本操作以及链表算法的实现过程。 线性表作为一种常见的数据结构,其特点是元素之间存在一对一的线性关系。线性表中数据元素...

    栈的链式存储结构C实现

    链式存储结构是栈的一种实现方式,相比数组实现,它具有更大的灵活性,特别是在动态调整容量时。 本篇将详细介绍如何使用C语言通过单链表来实现栈的功能。首先,我们需要定义一个链表节点结构体,它包含一个数据域...

    线性表的链式存储结构

    线性表的链式存储结构在计算机科学中是一种常见的数据结构,它用于组织和操作一组具有线性顺序的元素。在这种结构中,每个元素都称为节点,每个节点包含数据和指向下一个节点的引用。链式存储与数组不同,因为数组中...

    栈的顺序与链式存储结构与操作

    ### 栈的顺序与链式存储结构与操作 #### 标题解读 本文主要讨论了栈数据结构的两种实现方式:顺序存储结构和链式存储结构,并提供了具体的代码实现。 #### 描述解析 该描述表明文章提供的代码已经通过了相关的测试...

    数据结构实验报告2线性表的链式存储结构.doc

    实验报告的主题是“线性表的链式存储结构”,它主要涵盖了线性表的基本概念、链式存储方式以及相关的操作,如初始化、插入、删除、查找等。线性表是一种基本的数据结构,它是由n(n&gt;=0)个相同类型元素构成的有限...

    链式存储结构堆栈c程序

    链式存储结构堆栈是一种在计算机科学中常用的数据结构,特别是在C语言编程中。相比于数组实现的静态堆栈,链式堆栈具有更大的灵活性,因为它不依赖预先分配的固定空间,而是通过链接节点动态地扩展和收缩。在这个...

    栈_链式存储

    链式存储是实现栈的一种有效方式,相比数组存储,它具有动态扩展的优势,不需预估容量,可以更灵活地处理数据。 链式存储的栈通常由一系列节点组成,每个节点包含数据和指向下一个节点的指针。栈顶指针指向栈顶元素...

    作业 第三章 栈和队列 顺序存储结构和链式存储结构

    本章主要探讨的是两种常用且基础的数据结构——栈(Stack)和队列(Queue),以及它们的两种基本存储方式:顺序存储结构(Sequential Storage Structure)和链式存储结构(Linked Storage Structure)。我们将深入...

    第三章 栈和队列 顺序存储结构和链式存储结构

    本章将深入探讨两种重要的数据结构——栈和队列,以及它们的两种常见存储方式:顺序存储结构和链式存储结构。 栈(Stack)被称为“后进先出”(Last In, First Out,简称LIFO)的数据结构。栈的操作主要围绕两个...

    栈的链式存储结构的表示和实现实验报告.doc

    栈的链式存储结构的表示和实现实验报告.doc

    fmw666#Data-Structure#3.1.3 栈的链式存储结构1

    返回主页上一节下一节3.1.3 栈的链式存储结构链栈就是采用链式存储的栈。C 语言描述:typedef struct LinkNode {所有的操作都在表头进行

    C#编写栈的链式存储程序

    在C#中,我们可以使用多种方式来实现栈,其中链式存储是一种常见且灵活的方法。下面我们将深入探讨如何使用C#编写链式存储的栈,并通过`LinkedStackTest`这个例子来理解其实现细节。 首先,栈的基本操作包括压入...

    栈链式存储

    在栈链式存储中,每个元素被称为节点,每个节点包含两个部分:数据域和指针域。数据域用于存储实际的数据,而指针域则指向下一个节点。栈顶指针(top)始终指向栈顶元素,当没有元素时,栈顶指针为空。栈的基本操作...

    《数据结构》--栈的顺序存储和链式存储

    在这个主题中,我们将专注于两种重要的数据结构实现:栈的顺序存储和链式存储。栈是一种特殊的数据结构,被称为“后进先出”(LIFO)结构,这意味着最后进入的元素将首先被取出。这种特性使得栈在许多算法和程序设计...

    数据结构-栈的链式存储

    总结起来,栈的链式存储是一种高效且灵活的数据结构实现方式,它允许动态扩展,具有较高的空间效率,并能快速执行基本操作。在编程实践中,掌握链式栈的原理和实现对于解决复杂问题有着重要的作用。

Global site tag (gtag.js) - Google Analytics