链栈--(大话数据结构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(LinkStack *L){
L->top=NULL;
L->count=0;
}

//入栈
int Push(LinkStack *L,int e){
    LinkStackptr s=new StackNode;//新元素申请内存
    s->data= e;          //将待插入的数据放入 申请的节点的data
    s->next=L->top;  //top 中的数据放进新节点的next
    L->top=s;            //将s 的赋给top
    L->count++;        //数据个数加一
    return 0;              //正常终止
}

int Pop(LinkStack  *L)
{
    LinkStackptr p;
    if(L->top==NULL )  //判断是否为空,为空说明为空栈
        return -1;
    int e;
       e=L->top->data;   //top 指的栈顶的 数据
       p=L->top;            //top赋给p
       L->top=L->top->next;   //  大话数据结构99页
       free(p);                //释放P
       L->count--;         //数据减一
       return e;             //返回出栈数据
}
// 销毁栈void DestroyStack(LinkStack *L)
{
    LinkStackptr q;
    while(L->count)
    {
        q=L->top->next;
        delete L->top;
        L->top=q;
        L->count--;
    }
cout<<"销毁成功"<<endl;
}

void main(){
    LinkStack a;    InitStack(&a);
    Push(&a,3);
    Push(&a,4);
    Push(&a,5);

    cout<<Pop(&a)<<endl;
    cout<<Pop(&a)<<endl;
    cout<<Pop(&a)<<endl;
}

时间: 2024-11-06 14:14:10

链栈--(大话数据结构97页)的相关文章

【Java】 大话数据结构(6) 线性表之栈

本文根据<大话数据结构>一书,实现了Java版的栈的顺序存储结构.两栈共享空间.栈的链式存储机构. 栈:限定仅在表尾进行插入和删除操作的线性表. 栈的插入(进栈)和删除(出栈)操作如下图所示.   1.栈的顺序存储结构 用数组存放数据,top变量来指示栈顶元素在数组中的位置(栈顶指针).一个长度为5的栈的示意图如下: 实现程序: /** * 栈的顺序储存结构 * * 问题:构造器中,泛型数组创建是否有更好的方法? * @author Yongh * */ public class SqStac

《大话数据结构》--- 第四章 栈与队列

栈(Stack)是限定仅在表尾进行插入和删除操作的线性表. 把允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的栈称为空栈.栈又称为后进先出的线性表,简称LIFO结构. 栈的插入操作,叫做进栈,也称压栈.入栈. 栈的删除操作,叫做出栈,也称弹栈. 当两个栈一个占用内存可能太大 但内容较少 另一个占用内存可能有剩余 可以考虑使用一个数组来存两个栈,一个底端从下标0开始,另一个底端从下标n-1开始,只要两个栈不碰头 就可以实现空间的有效利用. 栈的链式存储结构称为栈链. 如果栈的使用过

《大话数据结构》笔记(4-1)--栈与队列:栈

栈的Java实现代码: https://github.com/Lyu0709/data-structure/blob/master/src/com/coding/basic/stack/Stack.java 逆波兰算法实现: https://github.com/Lyu0709/data-structure/blob/master/src/com/coding/basic/stack/RPN.java 第四章  栈与队列 栈 定义 我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(b

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

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

数据结构4_链栈

用指针方式实现栈,相对于顺序栈,指针方式不用指定栈的大小, 先定义一个栈节点类,再定义一个链栈类,为使链栈类能访问栈节点的元素,设链栈类为栈节点类的友元类. #include<iostream>using namespace std;class LinkStack;class StackNode   //设计每个节点的类型{    char *data;    StackNode *next;    friend class LinkStack;   //设置友元类,以便LinkStack类访

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

大话数据结构——使用栈实现简单的四则运算

最近在读<大话数据结构>,里面有个例子是使用栈实现四则运算,现在我用java把这个功能实现试试 代码如下: package com.datastruct; import java.util.ArrayList; import java.util.Stack; import java.util.regex.Matcher; import java.util.regex.Pattern; public class StackPractice { private static ArrayList&l

数据结构 --- 链栈(栈的链式存储结构)

工程目录结构: common.h: 1 //#ifndef __common_h__ 2 //#define __common_h__ 3 4 #define OK 1 5 #define ERROR 0 6 #define TRUE 1 7 #define FALSE 0 8 9 #define MAXSIZE 20 10 11 typedef int Status; //函数的返回结果,OK.ERREO.TRUE.FALSE 12 typedef int ElemType; //结点数据域的