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

C语言数据结构学习:栈

C语言 数据结构学习 汇总入口:

C语言数据结构学习:[汇总]

1. 栈

  1. 栈,实际上是一种特殊的线性表。
  2. 这里使用的是链表栈,链表栈的博客:C语言数据结构学习:单链表

2. 栈的特点

  1. 只能在一端进行存取操作,导致存取的元素元素有先进后出的特点
  2. 栈是一种只能在一端进行插入和删除操作的特殊线性表。
  3. 后进先出(Last In First Out,LIFO)
    • 就像往一个桶里放东西再取东西一样,后放进去的东西会先被取出来。
  4. 基本操作
    • 入栈(push):将一个元素压入栈顶。例如,往栈里放一本书,这本书就成为了新的栈顶元素。
    • 出栈(pop):从栈顶取出一个元素。相当于从桌子上拿走最上面的那本书。
    • 读栈顶元素(peek):只查看栈顶元素的值而不取出它。如同看一下最上面那本书是什么,但不拿走它。

3. 代码示例

  1. 定义新的类型:Node,用于创建节点

    /* 定义新的类型Node,用于创建节点 */
    typedef struct Node {int data;struct Node* next;
    }Node;
    
  2. 初始化栈

    /* 初始化栈 */
    Node* initStack() {Node* S = (Node*)malloc(sizeof(Node));S->data = 0;S->next = NULL;return S;
    }
    
  3. 入栈(push)、出栈(pop)、读栈顶元素(peek)

    /* 出栈 */
    //判断栈是否为空
    int isEmpty(Node* S) {if (S->data == 0 || S->next == NULL) {return 1;}else{return 0;}
    }
    //出栈
    int pop(Node* S) {if (isEmpty(S)) {return -1;}else {Node* current = S->next;	//获取第一个元素int data = current->data;	//获取第一个元素的dataS->next = current->next;	//把栈头的next指向当前的nextfree(current);				//释放当前return data;				//返回data}
    }/* 入栈 */
    void push(Node* S, int data) {Node* node = (Node*)malloc(sizeof(Node));node->data = data;node->next = S->next;S->next = node;S->data++;
    }/* 读栈顶元素 */
    int peek(Node* S) {if (isEmpty(S)) {return -1;}else {S->data--;return S->next->data;}
    }
    
  4. 打印栈

    /* 打印栈 */
    void printStack(Node* S) {Node* current = S->next;while (current){	//当前不为空则进入printf("%d ", current->data);current = current->next;}printf("NULL\\n");
    }
    
  5. 测试

    /* 测试 */
    int main(void)
    {Node* S = initStack();push(S, 1);printStack(S);push(S, 2);printStack(S);push(S, 3);printStack(S);push(S, 4);printStack(S);push(S, 5);printStack(S);pop(S);printStack(S);pop(S);printStack(S);pop(S);printStack(S);pop(S);printStack(S);return 0;
    }
    

http://www.lryc.cn/news/471962.html

相关文章:

  • 如何快速分析音频中的各种频率成分
  • MongoDB 6.0 主从复制配置
  • NPU 神经网络处理单元
  • 安宝特分享 | AR技术引领:跨国工业远程协作创新模式
  • Vulkan 开发(五):Vulkan 逻辑设备
  • Kafka 解决消息丢失、乱序与重复消费
  • 计算机专业毕业生面试工具推荐:白瓜面试
  • 数字IC开发:布局布线
  • 高空作业未系安全带监测系统 安全带穿戴识别预警系统
  • k8s的配置和存储(ConfigMap、Secret、Hostpath、EmptyDir以及NFS的服务使用)
  • JS轮播图实现自动轮播、悬浮停止轮播、点击切换,下方指示器与图片联动效果
  • 使用 Kafka 和 MinIO 实现人工智能数据工作流
  • 力扣题86~90
  • 【JavaEE】【多线程】定时器
  • CI/CD 的原理
  • 进一步认识ICMP协议
  • NUUO网络视频录像机upload.php任意文件上传漏洞复现
  • WebGL 3D基础
  • Docker 部署MongoDb
  • 【Hadoop】hadoop的路径分不清?HDFS路径与本地文件系统路径的区别
  • 倪师学习笔记-天纪-易经八卦
  • 自动驾驶性能分析时,非常有用的两个信息
  • 数据结构 - 并查集
  • canvas基础+应用+实例
  • Linux命令 用户操作简介
  • 大语言模型的Scaling Law【Power Low】
  • windows环境下,使用docker搭建redis集群
  • Python(pandas库3)
  • WPF+MVVM案例实战(十)- 水波纹按钮实现与控件封装
  • 数据结构————map,set详解