数据结构4_链栈

用指针方式实现栈,相对于顺序栈,指针方式不用指定栈的大小,

先定义一个栈节点类,再定义一个链栈类,为使链栈类能访问栈节点的元素,设链栈类为栈节点类的友元类。

#include<iostream>
using namespace std;
class LinkStack;
class StackNode   //设计每个节点的类型
{
    char
*data;
    StackNode *next;
   
friend class LinkStack;   //设置友元类,以便LinkStack类访问其元素
};
class LinkStack
{
   
StackNode *top;
public:
    LinkStack()
   
{
        top=NULL;
    }
   
int stackempty()  //判断是否空栈
    {
   
    return top==NULL;
   
}
    void push(char *e)//入栈
   
{
        StackNode *q;
        q=new
StackNode;
        q->data=new char(sizeof(e)+1);
       
strcpy(q->data,e);
       
q->next=top;
  //q的下一个节点指向顶栈
   
    top=q;      
  //顶栈指针指向当前指针;西电用教材中c代码出错
   
}
    void pop(char *&e)
   
{
        StackNode *q=top;
        if(stackempty())
   
    {
           
cout<<"stack
underflow"<<endl;
       
    return;
       
}
        e=new char(sizeof(q->data)+1);
   
    strcpy(e,q->data);
       
top=q->next;
   
    delete
q;
    }
    void show()    //栈的显示
    {
   
    StackNode *q=top;
   
    while(q!=NULL)
   
    {
           
cout<<q->data<<endl;
       
    q=q->next;
       
}
    }
};

void
main()
{
    LinkStack a;
   
a.push("sb");
    a.push("test");
    a.push("stack");
   
char *e;
    a.pop(e);
   
cout<<"pop is:
 "<<e<<endl;
    a.push("link");
   
a.show();

}

来自为知笔记(Wiz)

数据结构4_链栈

时间: 2024-10-06 16:22:40

数据结构4_链栈的相关文章

数据结构:链栈

栈的定义: 当单链表限定只能在头部进行插入和删除操作的时候,就是链栈.同时把栈顶放在单链表的头部,使单链表的头指针和栈顶指针top合二为一,所以对于链栈,就不再需要头结点了.这时对链栈的push也就相当于单链表的头插法. 同时对链栈来说,基本不存在栈满的情况,除非内存已经没有可以使用的空间了,对于空栈来说,链表原定义是头指针指向空,那么链栈的空其实就是top==NULL的时候. 链栈的代码实现: #include <iostream> #include <stdlib.h> usi

小猪的数据结构辅助教程——3.2 栈与队列中的链栈

小猪的数据结构辅助教程--3.2 栈与队列中的链栈 标签(空格分隔): 数据结构 1.本节引言: 嗯,本节没有学习路线图哈,因为栈我们一般都用的是顺序栈,链栈还是顺带提一提吧, 栈因为只是栈顶来做插入和删除操作,所以较好的方法是将栈顶放在单链表的头部,栈顶 指针与单链表的头指针合二为一~所以本节只是讲下链栈的存储结构和基本操作! 2.链栈的存储结构与示意图 存储结构: typedef struct StackNode { SElemType data; //存放的数据 struct StackN

5、蛤蟆的数据结构笔记之五链栈实现

5.蛤蟆的数据结构笔记之五链栈实现 本篇名言:"人生就像奕棋,一步失误,全盘皆输." 昨天对栈和队列进行了定义.这次我们来看下如何使用代码来实现链栈和链队列,后续蛤蟆会记录如何将栈应用到实际问题中. 栈一般是顺序结构,但是也可以采用链式存储结构,具体如下实现. 欢迎转载,转载请标明出处: 1.  定义结构体 #define MAX_STACKS10 typedef struct { intkey; /*otherfields */ }element; typedef struct st

数据结构之自建算法库——链栈

本文针对数据结构基础系列网络课程(3):栈和队列中第4课时栈的链式存储结构及其基本运算实现. 按照"0207将算法变程序"[视频]部分建议的方法,建设自己的专业基础设施算法库. 链栈算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:listack.h,包含定义链栈数据结构的代码.宏定义.要实现算法的函数的声明: #ifndef LISTACK_H_INCLUDED #define LISTACK_H_INCLUDED typedef char ElemType; typede

链栈--(大话数据结构97页)

//链栈的实现 --大话数据结构99页 #include <iostream> using namespace std; //链节点定义 typedef struct stacknode { int data; struct stacknode * next; }StackNode, *LinkStackptr; //定义链栈,头指针 和 长度 struct LinkStack{ LinkStackptr top; int count; }; //初始化void InitStack(LinkS

数据结构 - 链栈的实行(C语言)

数据结构-链栈的实现 1 链栈的定义 现在来看看栈的链式存储结构,简称为链栈. 想想看栈只是栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢?由于单链表有头指针,而栈顶指针也是必须的,那干吗不让它俩合二为一呢,所以比较好的办法是把栈顶放在单链表的头部(如下图所示).另外,都已经有了栈顶在头部了,单链表中比较常用的头结点也就失去了意义,通常对于链栈来说,是不需要头结点的. 对于空栈来说,链表原定义是头指针指向空,那么链栈的空其实就是 top=NULL 的时候. 链栈的结构代码如下: /* 链栈

数据结构(java语言描述)链栈的定义

1.定义栈接口 package stack;public interface Istack {    public void clear();    public boolean isEmpty();    public int length();    public Object peek();    public void push(Object x) throws Exception;    public Object pop();} 2.定义Node结点 package stack; i

数据结构(C实现)------- 链栈

描述:      链栈,即栈的链式存储结构,链栈通常使用不带头结点的单链表来表示,因此其结点的结构和单链表的结点结构相同. 在一个链栈中,栈底就是链表的最后一个结点,而栈顶总是链表的第一个结点.因此,新入栈的元素即为链表中采用头插法新加入的结点,一个链栈可以由栈顶指针唯一确定,当top为NULL时,则表示该栈是一个空的链栈.  实现:   链栈结点的类型描述: typedef int ElemType; typedef struct node{ ElemType data; struct nod

数据结构(二):栈与链栈

#include <cstdio> #include <windows.h> #define MAXSIZE 100 struct Node { int data[MAXSIZE]; int top; }; typedef struct Node MyStack; //初始化 void MyStackInit(MyStack S) { S.top = -1; } //判空 BOOL MyStackEmpty(MyStack S) { if (S.top == -1) return