`
东边日出西边雨
  • 浏览: 257527 次
  • 性别: 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;
}
 

 

分享到:
评论

相关推荐

    数据结构栈链式存储结构

    数据结构栈链式存储结构

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

    实现线性表的顺序存储结构、链式存储结构,以及定义在上述结构的基本操作,栈的顺序存储结构、链式存储结构,以及定义在上述结构的基本操作

    3.3栈的链式存储

    栈的链式存储思想、数据类型类模板定义、相关操作。

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

    栈的顺序与链式存储结构与操作,已ac过,放心下载

    栈的链式存储结构C实现

    通过单链表方式实现,具有以下功能: 1.创建栈; 2.销毁栈; 3.清空栈; 4.进栈; 5.出栈; 6.获取栈顶元素; 7.获取栈的大小。

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

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

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

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

    数据结构-栈的链式存储

    栈的链式存储栈的链式存储栈的链式存储栈的链式存储栈的链式存储

    线性表的链式存储结构

    假设迷宫由m行n列构成,有一个入口和一个出口,入口坐标为(1,1),出口坐标为(m,n),试找出一条从入口通往出口的最短路径。设计算法并编程输出一条通过迷宫的最短路径或...要求:用栈和队列实现,不允许使用递归算法

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

    前面上传了线性表的顺序存储和链式存储,是为了方便学习数据结构的(喜欢用c语言描述版本)的朋友,现在把栈的顺序存储和链式存储上传,希望为同学们提供一个系统的学习数据结构的地方。

    栈的顺序和链式存储的表示和实现.docx

    掌握栈的基本操作在栈的顺序存储结构和链式存储结构上的实现。实验内容:栈的顺序表示和实现编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能。初始化顺序栈插入一个元素删除栈顶...

    数据结构实验报告2.docx

    1、定义栈可以是顺序存取结构或链式存储结构 2、分别定义栈的基本操作(初始化栈、判栈为空、出栈、入栈等) 3、定义一个函数用来实现上面问题: 十进制整数 X 和 R 作为形参 初始化栈 只要 X 不为 0 重复做下列动作...

    栈和队列的顺序存储结构和链式存储结构停车场问题

    设有一个可停放 N 辆汽车的狭长停车场 , 只有一个大门供车辆出入 。 车辆按到达先后顺序依次从最里面向大门口停放 。 如果已放满 N 辆车 , 再来的车辆只能在大门外的便道上等待 , 一旦有车辆从停车场离开排在便道...

    栈链式存储

    一个较为完整的栈链式存储,包含了很多函数及基础算法。main可运行测试。

    数据结构实验栈和队列详细实验报告

    (1) 熟悉栈的特点(先进后出)及栈的基本操作,如入栈、出栈等,掌握栈的基本操作在栈的顺序存储结构和链式存储结构上的实现; (2) 熟悉队列的特点(先进先出)及队列的基本操作,如入队、出队等,掌握队列的...

    C语言中栈的顺序存储和链式存储

    C语言中栈的顺序存储和链式存储

    栈类的实现

    本资源是属于栈类的实现,包含了seqlist.h,是我总结了老师上课的内容 栈类的实现

    栈的链式存储:链栈的C语言实现

    链栈是特殊的链表,它限制只能在链表的一端进行插入删除操作,允许操作的一端称为栈顶,另一端称为栈底。本代码包含:创建一个...具体链栈实现的详细分析可参考文章《【数据结构】栈的链式存储:链栈的C语言实现》。

Global site tag (gtag.js) - Google Analytics