当前位置: 首页 > 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;
}
 

相关文章:

  • 让MySQL更快:EXPLAIN语句详尽解析
  • Vue3集成Element Plus完整指南:从安装到主题定制下-实现后台管理系统框架搭建
  • C++ class和struct的区别
  • Linux中的文件描述符
  • SIAM-2010《Making $k$-means even faster》
  • Kubernetes 自动缩放模式:HPA、VPA
  • Laravle 证件照排版
  • AD9268、AD9643调试过程中遇到的问题
  • 转移dp简单数学数论
  • SAR ADC 的DAC 参考的选择逻辑
  • 精益数据分析(82/126):先行指标驱动的增长黑客策略——从相关性到因果性的跨越
  • ollama接入图像识别大模型
  • PINN高阶技术综合应用:复杂问题求解与神经算子进阶
  • C/C++STL---<chrono>
  • redis功能清单
  • 【Unity】使用InputSystem实现UI控件与键盘输入绑定以及如何快速制作虚拟摇杆
  • Pycharm和Flask的学习心得(7)
  • 236.二叉树的最近公共祖先
  • python web开发-Flask模板引擎Jinja2完全指南
  • 进一步学习线程相关知识
  • 大连商城网站建设/抖音推广方案
  • 个人网站的基本风格是/网络营销的营销策略
  • 旅行社网站建设方案/在线培训系统平台
  • 网站分类目录大多数依靠的是人为提交而不是蜘蛛/页面优化
  • 网站超链接怎么做/开发网站用什么软件
  • 网络推广网站/百度400电话