当前位置: 首页 > news >正文

C语言数据结构-链式栈

头文件:stack.h

#ifndef __STACK_H__
#define __STACK_H__

#include <stdio.h>
#include <stdlib.h>

typedef int DataType;

/* 链式栈节点类型 */
typedef struct staNode
{
    DataType data;
    struct staNode *pNext;
}StackNode;


/* 链式栈标签类型 */
typedef struct list
{
    StackNode *pTop;   //指向栈顶指针
    int cLen;
}StackList;

extern StackList *createSatckList();
extern int isEmptyStackList(StackList *);
extern int pushStackList(StackList *, DataType );
extern int popStackList(StackList *, DataType *);
extern DataType getStackTop(StackList *);
extern void clearStackList(StackList *);
extern void destroyStackList(StackList **);

extern void showStackList(StackList *pList);
#endif
源文件:stack.c main.c

stack.c

#include "stack.h"

StackList *createSatckList()
{
    StackList *pList = malloc(sizeof(StackList));
    if (NULL == pList)
    {
        perror("fail to malloc");
        return NULL;
    }
    pList->pTop = NULL;
    pList->cLen = 0;

    return pList;
}


int isEmptyStackList(StackList *pList)
{
    return pList->cLen == 0;
}

入栈:
int pushStackList(StackList *pList, DataType data)
{
    StackNode *pTmpNode = malloc(sizeof(StackNode));
    if (NULL == pTmpNode)
    {
        perror("fail to malloc");
        return -1;
    }
    pTmpNode->data = data;
    pTmpNode->pNext = NULL;

    pTmpNode->pNext = pList->pTop;
    pList->pTop = pTmpNode;
    pList->cLen++;

    return 0;
}

遍历:

void showStackList(StackList *pList)
{
    StackNode *pTmpNode = pList->pTop;
    while (pTmpNode != NULL)
    {
        printf("%d ", pTmpNode->data);
        pTmpNode = pTmpNode->pNext;
    }
    printf("\n");
}

出栈:
int popStackList(StackList *pList, DataType *pOutData)
{
    if (isEmptyStackList(pList))
    {
        return 0;
    }
    StackNode *pTmpNode = pList->pTop;
    if (NULL != pOutData)
    {
        *pOutData = pTmpNode->data;
    }
    pList->pTop = pTmpNode->pNext;
    free(pTmpNode);
    pList->cLen--;

    return 0;
}

DataType getStackTop(StackList *pList)
{
    if (!isEmptyStackList(pList))
    {
        return pList->pTop->data;
    }
}

void clearStackList(StackList *pList)
{
    while (pList->pTop != NULL)
    {
        popStackList(pList, NULL);
    }
}

销毁:

void destroyStackList(StackList **ppList)
{
    clearStackList(*ppList);
    free(*ppList);
    *ppList = NULL;
}
main.c

#include "stack.h"


int main(int argc, const char *argv[])
{
    StackList *pList = NULL;
    DataType OutData;

    pList = createSatckList();

    pushStackList(pList, 1);
    pushStackList(pList, 2);
    pushStackList(pList, 3);
    pushStackList(pList, 4);

    showStackList(pList);

    popStackList(pList, &OutData);
    printf("pop data = %d\n", OutData);

    showStackList(pList);

    destroyStackList(&pList);
    return 0;
}
 

http://www.xdnf.cn/news/628219.html

相关文章:

  • 为什么尺规无法三等分任意角?
  • Eclipse中设置Java程序运行时的JVM参数
  • 聊一聊手动测试与探索性测试的区别
  • 嵌入式培训之系统编程(四)进程
  • 试验台铁地板:颠覆传统的创新之举
  • 【RocketMQ 生产者和消费者】- 生产者启动源码 - MQClientInstance 定时任务(4)
  • ✨ PLSQL卡顿优化
  • 嵌入式开发之STM32学习笔记day10
  • Linux系统之pwd命令的基本使用
  • 分布式锁总结
  • 危化品经营单位安全生产管理人员考试主要内容
  • SQL进阶之旅 Day 2:高效的表设计与规范:从基础到实战
  • CMake指令:add_library()
  • 主从复制启动
  • 二叉树层序遍历6
  • C++--auto详解
  • 2025家政预约小程序开发:功能模块解析与行业解决方案
  • Cookie 与 Session
  • Adminer 连接mssql sqlserver
  • SEO长尾词优化精准布局
  • 构建Harbor私有镜像库(详细版)
  • 《BI 展示:从核心目标到未来趋势》
  • 『uniapp』uni-share 分享功能 使用例子(保姆级图文)
  • STM32上配置图像处理库时常见错误总结
  • 【IEEE 2025】低光增强KANT(使用KAN代替MLP)----论文详解与代码解析
  • Java——设计模式(Design Pattern)
  • DAY 35
  • Shell三剑客之awk
  • 全球化 2.0 | 云轴科技ZStack助力中东智慧城市高性能智能安防云平台
  • TypeScript小技巧使用as const:让类型推断更精准。