首页 > 编程语言 >链栈的接口程序

链栈的接口程序

时间:2024-04-25 23:13:05浏览次数:14  
标签:return Bottom LkStack 程序 接口 链栈 Pbottom NewNode Top

/*************************************************
 *
 *   file name:LkStack.c
 *   author   :[email protected]
 *   date     :2024/04/25
 *   brief    :构建链栈
 *   note     :None
 *
 *   CopyRight (c) 2024    [email protected]    All Right Reseverd
 *
 **************************************************/
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
/*************************************************
 *
 *   func name     :
 *   brief         :
 *   func parameter:
 *
 *
 *   return        :None
 *   note          :None
 *   func author   :[email protected]
 *   date          :2024/04/25
 *   version       :V1.0
 **************************************************/
typedef int DataType_t;
typedef struct LkStack // 存储栈的数据(栈底+栈顶)
{
    DataType_t Data;     // 结点的数据域
    struct LkStack *Top; // 栈顶
} LkStack_t;

// 创建一个空的链栈
LkStack_t *LkStack_Create(void)
{
    LkStack_t *Bottom = (LkStack_t *)calloc(1, sizeof(LkStack_t));

    if (NULL == Bottom)
    {
        perror("calloc memory for Bottom is failed!\n");
        exit(-1);
    }

    Bottom->Top = NULL;
    return Bottom;
}
// 创建一个新结点,并对新结点进行初始化
LkStack_t *LkStack_NewNode(DataType_t data)
{
    LkStack_t *NewNode = (LkStack_t *)calloc(1, sizeof(LkStack_t));
    NewNode->Data = data;
    NewNode->Top = NULL;
}

// 新元素从栈顶入栈,即从链表的头部插入元素
bool LkStack_Push(LkStack_t *Bottom, DataType_t data)
{
    LkStack_t *NewNode = LkStack_NewNode(data);
    if (NULL == Bottom->Top) // 判断链表是否为空
    {
        // 链表为空
        Bottom->Top = NewNode;
        return true;
    }
    // 2.2链表非空
    {
        NewNode->Top = Bottom->Top;
        Bottom->Top = NewNode;
        return true;
    }
}
// 判断栈是否为空
bool LkStack_IsEmpty(LkStack_t *Bottom)
{
    if (Bottom->Top == NULL)
        return true;
    return false;
}

DataType_t LkStack_Pop(LkStack_t *Bottom)
{
    DataType_t temp = 0; // 存储出栈元素的值
    // 判断栈是否为空
    if (LkStack_IsEmpty(Bottom))
    {
        printf("LkStack is empty!\n");
        return;
    }

    temp = Bottom->Top->Data;
    LkStack_t *Pbottom = Bottom->Top; // 备份首节点地址,用于最后释放首结点地址
    Bottom->Top = Pbottom->Top;
    Pbottom->Top = NULL;
    free(Pbottom);
    printf("the poped element is %d\n", temp);
    return temp;
}
// 遍历顺序栈元素(测试函数)
bool LkStack_Print(LkStack_t *Bottom)
{
    LkStack_t *Pbottom = Bottom; // 备份头结点
    if (NULL == Bottom->Top)     // 判断链表是否为空,为空直接退出
    {
        printf("LkStacK is empty\n");
        return false;
    }

    while (Pbottom->Top)
    {
        Pbottom = Pbottom->Top;       // 遍历链表
        printf(" %d", Pbottom->Data); // 打印链表
    }
    printf("\n");
    return true;
}

int main(void)
{
    LkStack_t *Bottom = LkStack_Create();
    LkStack_Push(Bottom, 1);
    LkStack_Push(Bottom, 2);
    LkStack_Push(Bottom, 3);
    LkStack_Push(Bottom, 4);
    LkStack_Print(Bottom);

    LkStack_Pop(Bottom);
    LkStack_Pop(Bottom);
    LkStack_Print(Bottom);

    return 0;
}

标签:return,Bottom,LkStack,程序,接口,链栈,Pbottom,NewNode,Top
From: https://www.cnblogs.com/bell-c/p/18158882

相关文章

  • 双向循环链表的插入处理函数接口
    //方便访问,创建一个带头结点的双向循环链表//链表数据域取别名方便修改typedefintDataType_t;//构造双向循环链表的结点typedefstructDoubleCircularLList{DataType_tdata;//数据域structDoublLingkedList*prev;//直接前驱指针域......
  • 使用顺序栈设计一个把十进制数转换为十六进制数的接口
    数据结构使用顺序栈设计一个把十进制数转换为十六进制数的接口笔试题:设计一个进制转换程序,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。/****************************************************......
  • JAVA程序连接es(Elasticsearch)会出现长时间不请求,突然请求会连接超时的问题
       可以使用这个方法试试设置长时间保持策略 伪代码 /***配置长连接保持策略**@return*/publicConnectionKeepAliveStrategyconnectionKeepAliveStrategy(){return(response,context)->{//Honor'keep......
  • 利用SpringBoot的CommandLineRunner编写命令行jar程序
    1.项目pom<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.......
  • PostMan接口测试实用小点
    PostMan接口测试实用小点1.接口测试变量存取操作在Postman中有很多地方可以存储一些变量,这里只介绍经常使用的环境变量.变量设置后,在UI界面可以通过{{变量名}}获取到对应值.在环境变量中配置变量url=https://ct.ctrip.com在请求地址栏配置{{url}}/SwitchAPI/Order/Tick......
  • nvidia官方AI框架软件的命令行操作接口 —— NVIDIA GPU Cloud (NGC) CLI
    NVIDIAGPUCloud(NGC)CLI安装介绍地址:https://org.ngc.nvidia.com/setup/installers/cli安装好后需要输入自己的NVIDIANGC的APIKEY,该信息在下面地址中生成:https://org.ngc.nvidia.com/setup/api-key......
  • 网络实名认证?企业如何实现实名认证?C++身份证实名认证接口
    身份证,大家都不陌生,现如今,我们用到身份证的地方越来越多,人们在办理很多业务时都会要求实名制,比如,电信实名制,火车票,汽车票实名制。为规范网络环境,前段时间国家也出台了相关政策,上网也需要网络实名制,就连大家常用的共享单车在注册时都会要求你实名制,那么,身份证是真是假,是如何确......
  • C++二要素认证,游戏实名认证接口、金融实名认证
    随着移动互联的发展,越来越多的企业在金融市场都想分一杯羹,而哪种理财产品才是人们放心的理财产品呢?我们都知道理财产品开户都需要上传身份证号核验和图像进行验证,以保证个人信息的真实性,那么这些是如何来判别身份证的真伪呢?加入上传一张假的身份证是否也能验证通过呢?翔云身份......
  • 利用顺序栈进行进制转换程序
    数据结构顺序栈笔试题:设计一个进制转换程序,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。/***************************************************************************************file......
  • Navicat连接SQL server出现:[IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名
    问题 解决方法一找到Navicat的安装路径,然后找到sqlncli_x64.msi文件并安装,安装成功后重启Navicat重新进行连接,看是否成功。 解决方法二如果方法一没有找到找到sqlncli_x64.msi还是Navicat的安装路径,然后找到msodbcsql_64.msi文件并安装,安装成功后重启Navicat重新进行连接......