链式栈接口程序

这篇具有很好参考价值的文章主要介绍了链式栈接口程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

链式栈接口程序

目录
  • 链式栈接口程序
    • 以链表作为基础实现栈空间(链式栈)
    • 头文件
    • 链式栈的创建
    • 创建一个空的链式栈节点
    • 入栈
    • 出栈
    • 验证
      • 输出结果

以链表作为基础实现栈空间(链式栈)

图解

链式栈接口程序文章来源地址https://www.toymoban.com/news/detail-859161.html

头文件

/*******************************************************************
 *
 *	file name:	链式栈的接口
 *	author	 :  17647576169@163.com
 *	date	 :  2024-4-26
 *	function :	双向循环链表的接口
 * 	note	 :  None
 *
 *	CopyRight (c)  2024-4-26   17647576169@163.com   All Right Reseverd
 *
 * *****************************************************************/
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

链式栈的创建

// 指的是链式栈中的元素的数据类型,用户可以根据需要进行修改
typedef int DataType_t;

// 定义链式栈的节点结构体
typedef struct StackNode
{
    DataType_t data;        // 结点的数据域
    struct StackNode *next; // 结点的指针域
} StackNode_t;
/********************************************************************
 *
 *	name	 :	LList_NewNode
 *	function :  创建一个空的链式栈,链式栈应该有一栈顶,对链表进行初始化
 *	argument :
 *
 *	retval	 :  栈顶地址
 *	author	 :  17647576169@163.com
 *	date	 :  2024-4-26
 * 	note	 :  None
 *
 * *****************************************************************/
StackNode_t *CreateStack(void)
{
    StackNode_t *Top = (StackNode_t *)calloc(1, sizeof(StackNode_t));
    if (Top == NULL)
    {
        printf("Memory allocation failed!\n");
        exit(1);
    }
    Top->next = NULL; // 初始化栈顶为NULL
    return Top;
}

创建一个空的链式栈节点

/********************************************************************
 *
 *	name	 :	CreateStackNode
 *	function :  创建一个空的链式栈节点
 *	argument :
 *	retval	 :  LinkStack_t* 链式栈头节点地址
 *	author	 :  17647576169@163.com
 *	date	 :  2024-4-26
 * 	note	 :	None
 *
 * *****************************************************************/
StackNode_t *CreateStackNode(DataType_t data)
{
    // 1.创建一个新结点并对头结点申请内存
    StackNode_t *NewNode = (StackNode_t *)malloc(sizeof(StackNode_t));
    if (NewNode == NULL)
    {
        printf("Memory allocation failed!\n");
        exit(1);
    }

    // 2.对新结点进行初始化
    NewNode->data = data;
    NewNode->next = NULL;

    // 3.把头结点的地址返回即可
    return NewNode;
}

入栈

/********************************************************************
 *
 *	name	 :	push
 *	function :  入栈
 *	argument :	@data:需插入的数据
 *
 *	retval	 :  返回新创建链表节点的地址
 *	author	 :  17647576169@163.com
 *	date	 :  2024-4-22
 * 	note	 :
 *
 * *****************************************************************/

bool push(StackNode_t *Top, DataType_t data)
{
    // 创建新的栈节点
    StackNode_t *NewNode = CreateStackNode(data);
    if (NULL == NewNode)
    {
        printf("can not insert new node\n");
        return false;
    }
    NewNode->next = Top->next; // 新节点指向当前栈顶
    Top->next = NewNode;       // 更新栈顶为新节点
    printf("push:%d\n", data); // 入栈打印验证,测试用
    return true;
}

出栈

/********************************************************************
 *
 *	name	 :	pop
 *	function :  出栈操作
 *	argument :
 *
 *	retval	 :
 *	author	 :  17647576169@163.com
 *	date	 :  2024-4-22
 * 	note	 :
 *
 * *****************************************************************/
// 出栈操作
DataType_t pop(StackNode_t *Top)
{
    DataType_t data = Top->next->data;
    // 备份栈顶
    StackNode_t *Ptop = Top->next;
    if (Top->next == NULL)
    {
        printf("Stack is empty!\n");
        exit(1);
    }
    Top->next = Ptop->next; // 头节点指向首节点的后继
    Ptop->next = NULL;      // 首节点指向空
    free(Ptop);             // 释放首节点
    return data;
}

验证

int main(int argc,
         char const *argv[])
{
    StackNode_t *Top = CreateStack();
    push(Top, 1);
    push(Top, 2);
    push(Top, 3);
    push(Top, 4);

    printf("%d\n", pop(Top));
    printf("%d\n", pop(Top));
    printf("%d\n", pop(Top));
    printf("%d\n", pop(Top));
    return 0;
}

输出结果

push:1
push:2
push:3
push:4
4
3
2
1

到了这里,关于链式栈接口程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 链式栈接口设计(C语言)

    /** * @file name: 链式栈接口设计 * @brief * @author ni456xinmie@163.com * @date 2024/04/24 * @version 1.0 :版本 * @property :类比于顺序栈,链式栈也有一个栈顶和栈底。根据链式表特性,将第一个插入的值作为栈底,即尾节点作为栈底。首节点作为栈顶。 * @note * CopyRight (c) 2023-2024 ni456xinmie@1

    2024年04月25日
    浏览(30)
  • 【玩转408数据结构】线性表——双链表、循环链表和静态链表(线性表的链式表示 下)

            在前面的学习中,我们已经了解到了链表(线性表的链式存储)的一些基本特点,并且深入的研究探讨了单链表的一些特性,我们知道,单链表在实现插入删除上,是要比顺序表方便的,但是,单链表中每个结点仅存在一个指针指向其后续结点,那么如果我们想要找

    2024年04月10日
    浏览(61)
  • 链式二叉树的查找,遍历(递归实现)等接口的实现

    目录 前言: 一:二叉树的建立 (1)本文采用的二叉树表示方法 (2)手动建立一颗二叉树 二:二叉树的遍历 (1)二叉树的三种遍历方式 (2)分治思想 (3)前序遍历  (4)中序遍历 (5)后序遍历 三:求二叉树的节点和高度(深度) (1)求二叉树节点 ①求二叉树的全部节点 ②求二叉树的叶子节点

    2023年04月25日
    浏览(35)
  • 接口优化的目录(建议收藏)

    目录 前言 ​编辑 批处理 优点 缺点 场景 同步转异步  优点 缺点 场景 空间换时间 优点 缺点 场景 预处理 优点 缺点 场景 池化技术 优点 缺点 场景 串行改并行 优点 缺点 场景 索引 优点 缺点 场景 避免大事务 优点 缺点 场景 深度分页 优点 缺点 数据一致性问题的特殊处理

    2023年04月09日
    浏览(43)
  • 双向链表接口设计

    /** * @file name: 双向链表接口设计(非循环接口) * @brief * @author ni456xinmie@163.com * @date 2024/04/23 * @version 1.0 : * @property : * @note * CopyRight (c) 2023-2024 ni456xinmie@163.com All Right Reseverd */

    2024年04月24日
    浏览(30)
  • 数据结构 —— 双向链表(超详细图解 & 接口函数实现)

    数据结构 —— 顺序表 数据结构 —— 单链表 数据结构 —— 双向链表 数据结构 —— 队列 数据结构 —— 栈 数据结构 —— 堆 数据结构 —— 二叉树 数据结构 —— 八大排序 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元

    2024年02月11日
    浏览(42)
  • Postman自动更新后打不开,collections接口目录突然消失

    postman明明关闭了自动更新,今天突然就打不开了,双击postman.exe没反应,去安装目录一看它自己安装了几个版本,只能换一个版本的运行程序,结果打开了。 结果打开以后collections的接口目录没了。。。由于是自己的项目,最新的接口没有做备份,找工作空间一查也没有,属

    2024年02月08日
    浏览(88)
  • 【数据结构】_4.List接口实现类LinkedList与链表

    目录 1.链表的结构与特点 1.1 链表的结构: 1.2 链表的特点: 2. 不带头单链表的模拟实现 3. 单链表OJ 3.1 题目1:移除链表元素:  3.2 题目2:反转一个单链表 3.3 题目3:返回链表的中间结点 3.4 题目4:链表的倒数第k个结点 3.5 题目5:合并两个有序链表 3.6 题目6:链表的回文结构

    2024年02月15日
    浏览(45)
  • 【数据结构】速速收藏,一文带你参透双向链表各接口实现

    目录 🥕前言🥕: 🌽一、双向链表概述🌽: 1.双向链表概念: 2.双向链表结构: 🍆二、双向链表接口实现🍆: 1.工程文件建立: 2.接口实现(本文重点): Ⅰ.双向链表初始化: Ⅱ.打印双向链表: Ⅲ.申请新节点: Ⅳ.双向链表尾插: Ⅴ.双向链表尾删: Ⅵ.双向链表头插

    2024年02月02日
    浏览(42)
  • 【数据结构】图文并茂,通过逻辑图带你轻松拿捏链表,实现各种接口功能

    君兮_的个人主页 勤时当勉励 岁月不待人 C/C++ 游戏开发 Hello,米娜桑们,这里是君兮_,我们接着之前讲过的顺序表来继续介绍初阶数据结构的内容,今天给大家带来的是有关链表的基本知识和各种接口功能的实现 好了,废话不多说,开始今天的学习吧! — 概念:链表是一种

    2024年02月14日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包