news 2026/5/30 19:21:31

基础数据结构:栈、队列、链表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基础数据结构:栈、队列、链表

文章目录

    • 核心操作
    • 练习题
  • 队列
    • 核心操作
    • 练习题
  • 链表
    • 核心操作

先进后出

栈是一种限制访问端点的线性表,它只允许在表的一端进行插入和删除操作。这一端被称为栈顶,另一端称为栈底

就如同一个杯子,杯子的顶端相当于栈顶,底端就相当于是栈底,要想把杯子里面的东西取出来,只能从杯子的上面往外倒

核心操作

push(入栈)、pop(出栈)、top(查看栈顶)、size(栈的大小)、empty(栈是否为空)

C++ STL中的栈

#include<bits/stdc++.h>usingnamespacestd;intmain(){stack<int>s;// 入栈操作s.push(1);s.push(2);s.push(3);cout<<"栈大小: "<<s.size()<<endl;// 3cout<<"栈顶元素: "<<s.top()<<endl;// 3// 出栈操作s.pop();cout<<"弹出后栈顶: "<<s.top()<<endl;// 2// 遍历栈while(!s.empty()){cout<<s.top()<<" ";s.pop();}// 输出: 2 1return0;}

练习题

表达式括号匹配

#include<bits/stdc++.h>usingnamespacestd;intmain(){string s;cin>>s;intcnt1=0,cnt2=0;for(inti=0;i<s.size();i++){if(s[i]=='(')cnt1++;if(s[i]==')')cnt2++;}if(cnt1!=cnt2){cout<<"NO"<<endl;return0;}stack<char>stk;for(inti=0;i<s.size();i++){if(s[i]==')'){boolf=0;while(!stk.empty()){charc=stk.top();if(c=='('){f=1;stk.pop();break;}else{stk.pop();}}if(f!=1){cout<<"NO"<<endl;return0;}}else{stk.push(s[i]);}}cout<<"YES"<<endl;return0;}

队列

先进先出

队列是一种限制访问端点的线性表,它只允许在表的一端进行插入(队尾),在另一端进行删除(队首)

就像是排队买东西,在没有插队的情况下,你只能从后面开始排,然后从最前面离开

核心操作

push(入队)、pop(出队)、front(查看队首)、size(队列大小)、empty(队列是否为空)

C++ STL中的队列

#include<bits/stdc++.h>usingnamespacestd;intmain(){queue<int>q;// 入队操作q.push(1);q.push(2);q.push(3);cout<<"队头元素: "<<q.front()<<endl;// 1cout<<"队列大小: "<<q.size()<<endl;// 3// 出队操作q.pop();cout<<"出队后队头: "<<q.front()<<endl;// 2// 遍历队列while(!q.empty()){cout<<q.front()<<" ";q.pop();}// 输出: 2 3return0;}

练习题

【模板】队列

#include<bits/stdc++.h>usingnamespacestd;intmain(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);intn;cin>>n;queue<int>q;while(n--){intt;cin>>t;if(t==1){intx;cin>>x;q.push(x);}elseif(t==2){if(q.empty()){cout<<"ERR_CANNOT_POP"<<'\n';}else{q.pop();}}elseif(t==3){if(q.empty())cout<<"ERR_CANNOT_QUERY"<<'\n';elsecout<<q.front()<<'\n';}elseif(t==4){cout<<q.size()<<'\n';}}return0;}

链表

链表(Linked List)是一种线性数据结构,它由一系列节点(Node)组成。与数组不同的是,链表中的元素在内存中不是连续存储的,而是通过指针连接在一起。

🚂 火车车厢的比喻

想象一列火车🚂,每节车厢就是一个节点:

  • 车厢本身:装载货物(数据)
  • 车厢挂钩:连接下一节车厢(指针)
  • 车头:第一节车厢(头指针 HEAD)

可以随时加挂或卸下车厢(插入/删除),但要找到第5节车厢,必须从车头开始一节一节数过去。

链表节点的结构

每个链表节点包含两个关键部分:

┌─────────────┬─────────────┐ │ 数据域 │ 指针域 │ │ Data │ Next → │ └─────────────┴─────────────┘

举个例子:

HEAD(头指针) ↓ ┌────┬──┐ ┌────┬──┐ ┌────┬──┐ │ 10 │→ │ → │ 20 │→ │ → │ 30 │∅ │ └────┴──┘ └────┴──┘ └────┴──┘ 节点1 节点2 节点3(尾)

代码中的定义是:

// 链表节点定义structNode{intdata;// 数据域:存储实际数据Node*next;// 指针域:指向下一个节点};

核心操作

插入节点

在头部插入节点

voidinsertAtHead(intval){Node*newNode=newNode(val);// 创建新节点newNode->next=head;// 新节点指向原头节点head=newNode;// 更新头指针}

在尾部插入节点

voidinsertAtTail(intval){Node*newNode=newNode(val);if(head==nullptr){// 如果链表为空head=newNode;return;}Node*temp=head;while(temp->next!=nullptr){// 遍历到最后一个节点temp=temp->next;}temp->next=newNode;// 连接新节点}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/29 12:10:18

Docker + 多模态Agent = 王炸组合?5个真实生产环境编排案例深度剖析

第一章&#xff1a;Docker与多模态Agent融合的架构演进随着人工智能系统向复杂化、分布式方向发展&#xff0c;Docker容器技术与多模态Agent系统的融合成为现代智能架构的重要演进路径。该融合模式通过容器化封装实现多模态感知、决策与执行模块的解耦&#xff0c;提升系统可扩…

作者头像 李华
网站建设 2026/5/30 4:37:19

你用过哪些国产实时数据库?

随着中国数字经济加速发展&#xff0c;国产数据库正从政策驱动的“替代”走向技术创新驱动的“超越”。在这样一个快速增长的市场中&#xff0c;实时数据库作为连接工业现场与信息系统的关键桥梁&#xff0c;其重要性日益凸显。而在这个细分赛道中&#xff0c;大庆紫金桥软件技…

作者头像 李华
网站建设 2026/5/30 15:45:32

Android v4l2 camera apk:快速实现摄像头调试的终极工具

Android v4l2 camera apk&#xff1a;快速实现摄像头调试的终极工具 【免费下载链接】Androidv4l2cameraapk资源介绍 Android v4l2 camera apk是一款专为开发者设计的摄像头功能实现工具&#xff0c;支持在Android设备上进行摄像头预览和调试。它兼容多种Android版本&#xff0…

作者头像 李华
网站建设 2026/5/30 15:19:22

【STM32】低功耗

目录1 什么是低功耗&#xff1f;2 STM32电源系统结构3 低功耗模式介绍3.1 睡眠模式&#xff08;sleep mode&#xff09;3.2 停机模式&#xff08;stop mode&#xff09;3.3 待机模式&#xff08;standby mode&#xff09;4 寄存器及库函数介绍小实验&#xff1a;低功耗实验1 什…

作者头像 李华
网站建设 2026/5/30 19:00:34

协议认知论视域下:程序设计、网络安全与数据挖掘的三维融合

本文以“协议认知论”为核心框架&#xff0c;突破了传统网络研究中“协议、安全、编程”相互割裂的视角&#xff0c;创新性地提出了“认知-代码-攻防”三位一体的融合模型。通过解构协议作为“人类认知规则的数字化界面”这一本质&#xff0c;本文论证了以下核心观点&#xff1…

作者头像 李华
网站建设 2026/5/30 15:50:51

计算机Java毕设实战-基于springboot高校教务管理系统设计与实现基于SpringBoot学校教务管理系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华