数据结构学习02:受限线性表与树形结构
1. 栈 (Stack)与队列 (Queue)栈和队列本质上是一种特殊的表状结构它们与普通表的区别在于普通表可以在任意位置进行插入和删除 。而栈和队列只能在指定的位置进行插入和删除操作 。栈 (Stack)核心特性栈是一种先进后出 (LIFO)后进先出 (FILO) 的数据结构 。基本概念栈顶与栈底允许入栈和出栈的一端称为栈顶 不允许入栈和出栈的一端称为栈底 。栈针用于指向栈顶位置的指针或下标 。常见分类按照生长方向向高地址增长的称为增栈 向低地址增长的称为减栈 。按照栈针指向栈针指向入栈位置称为空栈 栈针指向栈顶当前元素位置称为满栈 。综合分类空增栈、满增栈、空减栈、满减栈 。操作与实现核心操作包括将数据插入栈顶的入栈压栈 以及从栈顶取出数据的出栈弹栈 。可以通过顺序栈或链式栈来实现 。队列 (Queue)核心特性队列是一种先进先出 (FIFO)后进后出的数据结构 。基本概念数据从队尾入队插入 从队头出队取出 。常见实现包括循环队列和链式队列 。递归思想创建二叉树非递归思想遍历二叉树2. 二叉树 (Binary Tree)树是用来描述数据一对多关系的数据结构 。二叉树是其中最常用的一种其树形结构中每个节点最多有2个后继节点 。节点与关系组成树形结构的数据称为节点 。根节点只有后继没有前驱 。叶子节点只有前驱没有后继 。分支节点既有前驱又有后继最多一个前驱可有多个后继 。数据来源的方向称为前驱祖先后续的方向称为后继子孙 。节点左右两侧的子节点分别称为左孩子和右孩子 。属性度量度前驱或者后继的个数 。入度均为1 出度为后续节点的个数 。层、高度与深度根节点在第一层往下层数递增 。节点深度是距离根节点的节点个数 节点高度是距离该节点最远的叶子节点的距离 。整体上树的高度、深度和层数是等价的 。特殊形态与数学特性满二叉树所有的叶子节点都在同一层 。完全二叉树将二叉树所有节点展开后编号连续 。特性第 $k$ 层最多有 $2^{k-1}$ 个节点 前 $k$ 层最多共有 $2^k-1$ 个节点 。二叉树的遍历深度优先遍历 (DFS)前序遍历根左右 、中序遍历左根右 、后续遍历左右根 。广度优先遍历 (BFS)层序遍历 。3.代码实现1.顺序循环队列main.c#includestdio.h#includeseqqueue.hint main(void){SeqQueue_t *pSeqQueue NULL;int i 0;pSeqQueue CreateSeqQueue(10);while (!IsFullSeqqueue(pSeqQueue)){EnterSeqQueue(pSeqQueue, i);i 2;}while (!IsEmptySeqqueue(pSeqQueue)){printf(%d , QuistSeqQueue(pSeqQueue));}printf(\n);DestorySeqQueue(pSeqQueue);return 0;}seqqueue.c#includestdio.h#includestdlib.h#includeseqqueue.hSeqQueue_t *CreateSeqQueue(int len){SeqQueue_t *pSeqQueue NULL;pSeqQueue malloc(sizeof(SeqQueue_t));if (pSeqQueue NULL){perror(fail to malloc);return NULL;}pSeqQueue-Maxlen len;pSeqQueue-Head 0;pSeqQueue-Tail 0;pSeqQueue-pData malloc(sizeof(DataType) * len);if (pSeqQueue-pData NULL){perror(fail to malloc);return NULL;}return pSeqQueue;}int IsEmptySeqqueue(SeqQueue_t *pSeqQueue){return pSeqQueue-Head pSeqQueue-Tail ? 1 : 0;}int IsFullSeqqueue(SeqQueue_t *pSeqQueue){return ((pSeqQueue-Tail 1) % pSeqQueue-Maxlen pSeqQueue-Head) ? 1 : 0;}int EnterSeqQueue(SeqQueue_t *pSeqQueue, DataType TmpData){if (IsFullSeqqueue(pSeqQueue)){return -1;}pSeqQueue-pData[pSeqQueue-Tail] TmpData;pSeqQueue-Tail (pSeqQueue-Tail 1) % pSeqQueue-Maxlen;return 0;}DataType QuistSeqQueue(SeqQueue_t *pSeqQueue){DataType TmpData 0;if (IsEmptySeqqueue(pSeqQueue)){return -1;}TmpData pSeqQueue-pData[pSeqQueue-Head];pSeqQueue-Head (pSeqQueue-Head 1) % pSeqQueue-Maxlen;return TmpData;}int DestorySeqQueue(SeqQueue_t **ppSeqQueue){free((*ppSeqQueue)-pData);free(*ppSeqQueue);*ppSeqQueue NULL;return 0;}

相关新闻

讨论一下GWAS的算法

讨论一下GWAS的算法

问题:GWAS分析所需的表型数据该如何得到? 背景:在关注到分析环境互作位点的关联分析算法后,如Fast3vmrMLM、FastGXE。我产生了疑惑,这些可以分析环境互作效应的算法需要的表型值和以往的算法是相同的吗?在一…

2026/7/5 17:04:07 阅读更多 →
多线程基础(2)

多线程基础(2)

1.创建线程的多种方式:方法一:继承Thread来创建一个类class MyThread extends Thread{ override public void run(){ System.out.println("打个比方") } } public class Demo1{ public static void main(String[] args){ Mythread tnew MyThre…

2026/7/5 6:23:41 阅读更多 →
OpenClaw:通过飞书发送文件的完整教程

OpenClaw:通过飞书发送文件的完整教程

OpenClaw:通过飞书发送文件的完整教程 最近的一次实践中,我发现 OpenClaw 的 message 工具完全原生支持文件发送,不需要任何改造或额外配置。本文将详细讲解如何通过 OpenClaw 在飞书中发送各种类型的文件。 📌 文章导览 适用场景…

2026/7/5 17:37:06 阅读更多 →

最新新闻

图论算法之深度遍历岛屿问题

图论算法之深度遍历岛屿问题

200. 岛屿数量 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int numIslands(char[][] grid) {int res 0;for(int r 0; r< grid.length; r){for(int c 0; c<grid[0].length; c){if(grid[r][c] 1){res;dfs(grid, r,c);}}}return res;}//从岛屿位置…

2026/7/6 3:07:59 阅读更多 →
Lemos:动态知识网络新范式

Lemos:动态知识网络新范式

Ima 与 Lemos 在知识组织方式上的本质区别在于&#xff0c;Ima 追求精确、静态、可推理的知识结构&#xff0c;而 Lemos 则致力于构建动态、关联、可生长的智能知识网络。Lemos 的核心优势在于其“AI知识图谱”双引擎驱动的范式&#xff0c;将知识库从被动的存储中心转变为主动…

2026/7/6 3:07:58 阅读更多 →
AI智能伴侣开发实战:从零构建你的专属聊天机器人

AI智能伴侣开发实战:从零构建你的专属聊天机器人

一、引言&#xff1a;当AI走进生活 在2026年的今天&#xff0c;人工智能早已不再是科幻电影中的遥远概念。从ChatGPT到DeepSeek&#xff0c;从Gemini到Qwen&#xff0c;大语言模型正以前所未有的速度改变着我们与计算机交互的方式。然而&#xff0c;对于大多数开发者而言&…

2026/7/6 2:59:57 阅读更多 →
避开 Playwright 常见陷阱,让你的 UI 测试更快更稳

避开 Playwright 常见陷阱,让你的 UI 测试更快更稳

做UI自动化测试的朋友应该都有过这种体验——本地跑得好好的&#xff0c;一上CI就挂&#xff1b;周一全绿&#xff0c;周二莫名其妙红一片&#xff1b;加了sleep能过&#xff0c;不加就报元素找不到。 如果你也遇到过这些情况&#xff0c;别急着怀疑是自己的代码写得不够好。很…

2026/7/6 2:57:57 阅读更多 →
AI Agent Skills:从代码补全到智能开发的效率革命

AI Agent Skills:从代码补全到智能开发的效率革命

&#x1f680; 30款热门AI模型一站整合&#xff0c;DeepSeek/GLM/Qwen 随心用&#xff0c;限时 5 折。 &#x1f449; 点击领海量免费额度 如果你还在用 AI 编程助手只是让它帮你补全代码行&#xff0c;那你可能只发挥了它 10% 的潜力。真正的效率革命&#xff0c;发生在你教…

2026/7/6 2:57:57 阅读更多 →
SONiC 2024 容器化架构解析:10个核心Docker容器如何驱动网络转发

SONiC 2024 容器化架构解析:10个核心Docker容器如何驱动网络转发

SONiC 2024容器化架构深度解析&#xff1a;10个核心容器如何构建下一代云网络1. 现代网络操作系统的容器化革命当微软在2016年首次开源SONiC项目时&#xff0c;很少有人能预料到这个基于Linux的网络操作系统会彻底改变数据中心网络的构建方式。八年后的今天&#xff0c;SONiC已…

2026/7/6 2:55:56 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性&#xff1a;5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域&#xff0c;单元测试是保证代码质量的重要环节。当应用涉及数据库操作时&#xff0c;测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南&#xff1a;用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南&#xff1a;告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况&#xff1a;下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools&#xff1a;5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里&#xff0c;参与了关于混合后量子密码学的讨论&#xff0c;应付端点攻击找茬的人&#xff0c;还参与留言板讨论后&#xff0c;发现“威胁模型”对多数人仍是陌生概念&#xff0c;且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”&#xff1a;我理解的渗透测试到底是什么&#xff1f;每次看到新闻里说某个大公司的数据被“黑”了&#xff0c;或者某个网站被攻击导致服务瘫痪&#xff0c;你是不是和我一样&#xff0c;心里会冒出两个念头&#xff1a;一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻