首页 > 其他分享 >数据结构——链式栈

数据结构——链式栈

时间:2024-04-26 21:02:55浏览次数:20  
标签:NULL LinStack stackTop top 链式 newNode 数据结构 data

二、链式栈

image

构造链式栈

//链式栈的有效数据类型,用户可以根据需要进行修改
typedef int DataType_t;

//构造单链式栈的结点
typedef struct LinkedStack {
    DataType_t data;               //结点的数据域
    struct LinkedStack *next;      //结点的的指针域
} LinStack_t;

typedef struct LinkedStackTop {
    LinStack_t *top;               //链栈的栈顶
} StaTop_t;

//创建链栈为空
StaTop_t *LinkedStack_Create() {
    StaTop_t *stackTop = (LinStack_t *) calloc(1, sizeof(StaTop_t));
    if (NULL == stackTop) {
        perror("calloc memory for Head is Failed");
        exit - 1;
    }
    stackTop->top = NULL;
    return stackTop;
}

//创建链栈的新结点
LinStack_t *LinStack_newNode(DataType_t data) {
    LinStack_t *newNode = (LinStack_t *) calloc(1, sizeof(LinStack_t));
    if (NULL == newNode) {
        perror("calloc memory for Head is Failed");
        exit - 1;
    }
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

//入栈
bool LinStack_Push(StaTop_t *stackTop, DataType_t data) {
    LinStack_t *newNode = LinStack_newNode(data);
    //判断是否为空栈
    if (NULL == stackTop->top) {
        stackTop->top = newNode;
    } else {
        newNode->next = stackTop->top;
        stackTop->top = newNode;
    }
    return true;
}

//出栈
DataType_t LinStack_Pop(StaTop_t *stackTop) {
    //判断是否为空栈
    if (NULL == stackTop->top) {
        perror(" the LinkedStack is empty");
    } else {
        LinStack_t *temp = stackTop->top;
        stackTop->top = temp->next;
        temp->next = NULL;
        //返回数据
        return temp->data;
    }
}

标签:NULL,LinStack,stackTop,top,链式,newNode,数据结构,data
From: https://www.cnblogs.com/Mr--Song/p/18160868

相关文章

  • 数据结构(笔试题-栈(入栈出栈)
    笔试题:实现//利用栈s1和s2实现队列,栈的思想是“后进先出”,队列的思想是“先进先出”,可以选择把栈s1作为入队缓存,把栈s2作为出队缓存//入队boolenQueue(s1,s2,intx){ inttemp;//用于存储出栈的元素的值 //1.判断栈s1是否已满,此时分为两种情况(满了or未满) if(s......
  • 链式队列
    队列原理介绍:​ 队列(Queue)和栈类似,相同点是都属于线性结构,不同点是栈遵循“后进先出”原则,而队列遵循“*先进先出*”的原则,也被称为“FIFO”结构,就是“FirstInputFirstOutput”​ 数据结构中的队列的两端都允许操作,只不过要求数据只能从队列的一端插入,从队列的另一端删除,可......
  • 单向链式队列
    目录目录单向链式队列创建空链表创建新结点入队判断链表是否为空出队遍历代码验证单向链式队列/**@filename: main.c@brief单向链式队列@[email protected]@date2024/04/[email protected]:版本@property:属性介绍@note补充注意说明CopyRight(c)2023......
  • 以链表为基础实现链式队列
    数据结构链式队列以链表为基础实现链式队列1.思路:如果打算以链表作为基础来实现队列的操作,可以避免内存浪费以及避免内存成片移动,只需要确定队头和队尾即可,一般把链表头部作为队头,可以实现头删,把链表尾部作为队尾,可以实现尾插。2.图示:3.代码:/****************************......
  • 链式栈接口程序
    链式栈接口程序目录链式栈接口程序以链表作为基础实现栈空间(链式栈)头文件链式栈的创建创建一个空的链式栈节点入栈出栈验证输出结果以链表作为基础实现栈空间(链式栈)图解头文件/********************************************************************* filename: 链式......
  • 数据结构—单链表队列头删尾插
    单链表队列的头删尾插/*************************************************/***@filename: 单链表队列的头删尾插.md*@brief实现对单链表队列的头删尾插*@[email protected]*@date2024/04/26*@version1.0:在下坂本,有何贵干*@property:no......
  • C语言数据结构:链式队列的创建及其出入队操作
    /**********************************************************************************************************该程序实现链式队列元素的增删改查,目的是提高设计程序的逻辑思维,另外为了提高可移植性,所以链式队列中元素*的数据类型为DataType_t,用户可以根据实际情况修改......
  • 数据结构-链表-2
    本函数功能为将查找单链表中的倒数第k个结点将其data输出<!--RevCount.c文件(查找单链表中的倒数第k个结点将其data输出)的实现-->/*******************************************************************************funcname:LinList_RevCount*function:......
  • Js链式调用面试题
    Js链式调用需求:要求可以链式调用对象的方法,该对象有四个方法,加减乘除,一个get结果方法eg:counter.add(3).sub(1).get()//2方法一通过Es6实现classCounter{privateresult=0;add(val:number){this.result+=val;returnthis;}sub(val:nu......
  • 数据结构算法题
    数据结构算法题通过键盘输入一个包括'('和')'的字符串string,判断字符串是否有效。要求设计算法实现检查字符串是否有效,有效的字符串需满足以下条件:A.左括号必须用相同类型的右括号闭合。B.左括号必须以正确的顺序闭合。C.每个右括号都有一个对应的相同类型的左括号。思......