【数据结构】链栈的定义和基本操作

2023-11-15

//链栈定义及各类操作
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<stdbool.h>

typedef int Elemtype;

typedef struct LiStack
{
    Elemtype data; //数据域
    struct LiStack *next; //指针域
} LiStack; //栈类型定义

//初始化链栈
void InitLiStack(LiStack S){
    S.next = NULL;
    return true;
}

//链栈进栈操作(将数据元素e压入栈中)
void PushLiStack(LiStack *S, Elemtype e){
    LiStack *top = (LiStack *)malloc(sizeof(LiStack));
    if (top == NULL)
        return false; //申请内存空间失败
    top->data = e;
    top->next = S->next;
    S->next = top; //指针前移至头节点
    return true;
}

//链栈出栈操作(将栈顶元素弹出,放到e所指的存储空间中)
void PopLiStack(LiStack *S, Elemtype *e){
    if (S == NULL)
        return false; //空栈,无数据
    LiStack *temp = S->next; 
    *e = temp->data;
    S->next = temp->next;
    free(temp);
    return true;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【数据结构】链栈的定义和基本操作 的相关文章

  • FPN网络结构+源码讲解

    YOLOF前传 特征金字塔 FPN 前言 这几天在读CVPR2021的中稿论文YOLOF You Only Look One level Feature 文章回顾了单阶段的特征金字塔网络 FPN 指出FPN的成功的原因在于它对目标检测中优化
  • c++ map用法 入门必看 超详细

    1 map的作用 可以实现各种类型的映射 可以用数组来类比 都是由下标和值组成 但数组用法很局限 下标不能是负数 而且开数组需要消耗太多的内存 开到10 7就内存超限了 因此 很多时候都用高级的map类或vector类来代替数组 其里面的成
  • “对象创建”模式——抽象工厂

    动机 在软件系统中 经常面临着 一系列相互依赖的对象 的创建工作 同时由于需求的变化 往往存在更多系列对象的创建对象 如何应对这种变化 如何绕过常规的对象创建方法 new 提供一种 封装机制 来避免客户程序和这种 多系列具体对象创建工作 的
  • 互联网编程之基于 TCP 的单线程文件收发程序(CS架构)

    目录 需求 服务端实现 客户端实现 测试 需求 可试着根据java编程课所学到的java socket编程技术 尝试编写一个基于 TCP 的单线程文件收发程序 需满足 服务端程序预先定义好需要发送的文件并等待客户端的连接 客户端连接成功后
  • 非极大值抑制(non-maximum suppression)的理解

    最近在学习RCNN时看到了非极大值抑制 一开始有点不明白 在网上学习了之后记录一下 非极大值抑制就是一个寻找局部最大值的过程 在进行目标检测时一般会采取窗口滑动的方式 在图像上生成很多的候选框 然后把这些候选框进行特征提取后送入分类器 一般

随机推荐