数据结构基本知识

一、什么是数据结构
1.1、组织存储数据

        ---------》内存(存储)

1.2、研究目的
  • 如何存储数据(变量,数组....)
  • 程序=数据结构+算法
1.3、常见保存数据的方法
  1. 数组:保存自己的数据
  2. 指针:是间接访问已经存在的空间------------》操作数据,并不能销毁别人的数据
  3. 指针数组:并不保存数据,也是指向那个空间,并不能保存数组
  4. 二维数组:保存数据的
  5. 数据库也其实数据结构,实质上是对复杂数据的一种封装
二、数据与数据之间的关系
2.1、数据的逻辑结构

        数据元素与元素之间的关系

  1. 集合:关系平等
  2. 线性:元素之间一对一的关系(表,数组,链表)
  3. 有当前数据出发,向后最多能找一个后继,先前找最多只能有一个前驱
  4. 树形:元素之间一对多(二叉树),从当前找,后继有多个,前驱只有1个
  5. 图型结构:元素之间多对多的关系(网状结构)
  6. 后继有多个,前驱有多个
2.2、数据的物理结构

1、顺序存储:采用一段连续的内存空间保存元素。
优点:空间连续,访问方便缺点:插入删除需要移动大量的元素需要预分配内存空间容易造成存储空间碎片
2、链式存储:采用一组非连续的内存空间保存元秦
缺点:访问元秦效率低优点:插入和删除数据方便不需要预分配内存
3、索引存储:通过关键字构建索引表,通过索引表来来找到数据的存储位置

索引:维护索引表,关键字和其对应得地址

4、散列存储(哈希存储):将数据元素的存储位置与关键码之间建立确定对应关系从而实现查找的存储方式

散列:选取关键字,经过计算,算出对应位置,下次只需要,拿着这个名字,经过计算,就找到位置

2.3、数组与链表区别
2.3.1、数组 线性顺序存储结构

1、空间连续

2、访问数据方便(O(1))

3、数据插入、删除复杂,需要移动大量数据(O(n))

4、预分配内存空间

5、容易产生内存碎片

1、按照指定字节对齐

2、注意结构成员分布

2.3.2、链表 线性链式结构

1、空间不连续

2、访问数据不方便(O(n))

3、数据的插入、删除方便,时间复杂度(O(1))

4、不需要预分配空间,只需申请一个新的节点插入进去即可

5、能够利用内存空间中比较小的碎片

注意:说数据属于那种关系的时候,两种都说。

2.4、物理结构

1、线性结构:

顺序表:-----》数组

链式表:-----》链表

2、链表:

单向链表:

有头链表:有一个头结点进行操作,只不过没有数据

无头链表:没有上述的东西

3、封装

--------》高内聚、低耦合

低耦合,关联程度低

高内聚,一个函数干一件事

面向过程的编程思想:第一步干什么,第二步3干什么....

面向对象的编程思想,封装性比较好

用什么来做什么

冰箱----------------------》

属性:特性(变量)

行为:装东西(函数)

大象-----------------------》

三、链表的操作
1、创建头结
Link_t *Create_link()
{Link_t *link = malloc(sizeof(link));if(NULL == link){perror("create error");return NULL;}link->clen = 0;link->phead = NULL;return link;
}
2、头插
int push_link_join(Link_t *plink,DATATYPE data)
{Link_Node_t *pnode = malloc(sizeof(Link_Node_t));if(NULL == pnode){perror("fail node");return -1;}pnode->data = data;pnode->pnext = NULL;pnode->pnext = plink->phead;plink->phead = pnode;plink->clen++;return 0;
}
3、尾插
int tail_insert(Link_t *plink,DATATYPE data)
{Link_Node_t *pnode = malloc(sizeof(Link_Node_t));if(NULL == pnode){perror("fail node");return -1;}pnode->data = data;pnode->pnext = NULL;Link_Node_t *p;p = plink->phead;if(p == NULL){p = pnode;}while(p->pnext){p = p->pnext;}pnode->data = data;pnode->pnext = NULL;p->pnext = pnode;plink->clen++;printf("%d\n",pnode->data);
}
4、遍历
int travel_link(Link_t *plink)
{int i = 0;Link_Node_t *p ;p = plink->phead;while(p != NULL){printf("num = %d,data = %d\n",i,p->data);++i;p = p->pnext;}
}
5、头删
int delete_link_first(Link_t *plink)
{Link_Node_t *pnode;if(plink->phead == NULL){return 0;}else{pnode = plink->phead;plink->phead = pnode->pnext;free(pnode);plink->clen--;}return 0;
}
6、尾删 
int delete_link_tail(Link_t *plink)
{Link_Node_t *pnode;if(plink->phead == NULL){return 0;}else if(plink->clen == 1){delete_link_first(plink);}else{pnode = plink->phead;while(pnode->pnext->pnext != NULL){pnode = pnode->pnext;}free(pnode->pnext);pnode->pnext = NULL;}
}
7、查对应结点
Link_Node_t *select_link(Link_t *link,DATATYPE data)
{Link_Node_t *pnode  = link->phead;while(pnode->data != data){pnode = pnode->pnext;}printf("num = %d\n",pnode->data);return pnode;
}
8、改
Link_Node_t *alter_link(Link_t *link,DATATYPE data,DATATYPE wishdata)
{Link_Node_t *pnode = select_link(link,data);pnode->data  = wishdata;printf("wishdata = %d\n",pnode->data);return pnode;
}
9、销毁
int destory_link(Link_t *link)
{Link_Node_t *pnode = link->phead;if(pnode == NULL){free(link);return 0;}else{while(link->clen != 0){delete_link_first(link);}return 0;}free(link);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/52362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Vue】pnpm创建Vue3+Vite项目

初始化项目 (1)cmd切换到指定工作目录,运行pnpm create vue命令,输入项目名称后按需安装组件 (2)使用vs code打开所创建的项目目录,Ctrl~快捷键打开终端,输入pnpm install下载项目…

[概率论] 随机变量的分布函数 (一)

文章目录 1.随机变量的分布函数2.离散型随机变量的分布函数3.连续性随机变量的分布函数 1.随机变量的分布函数 设X XX是一个随机变量,x xx是任意实数,则函数 几何表示 性质(一个函数是分布函数的充要条件) 2.离散型随机变量的分布…

数据结构-图-存储-邻接矩阵-邻接表

数据结构-图-存储 邻接矩阵 存储如下图1,图2 图1 对应邻接矩阵 图2 #include<bits/stdc.h> #define MAXN 1005 using namespace std; int n; int v[MAXN][MAXN]; int main(){cin>>n;for(int i1;i<n;i){for(int j1;j<n;j){cin>>v[i][j];}}for(int…

深度解析Unix系统的基本概念及优缺点和原理

介绍 Unix系统是一种多用户、多任务、分时操作系统&#xff0c;起源于20世纪70年代初&#xff0c;由贝尔实验室开发。它具有强大的命令行接口和层次结构的文件系统&#xff0c;支持多种处理器架构&#xff0c;广泛应用于工程应用和科学计算等领域。 基本概念 一、Unix系统的起…

数据分析-15-时间序列异常检测及方法组合应用(案例实战)

参考异常值数据预警分析 1 异常检测 1.1 适用场景 异常检测算法适用的场景特点有: (1)无标签或者类别极不均衡; (2)异常数据跟样本中大多数数据的差异性较大; (3)异常数据在总体数据样本中所占的比例很低。 常见的应用案例如: 金融领域:从金融数据中识别”欺诈用…

数学建模强化宝典(13)M-K检验法

前言 M-K检验法&#xff0c;全称为Mann-Kendall检验法&#xff0c;是一种非参数的假设检验方法&#xff0c;广泛应用于时间序列数据的趋势性变化检验&#xff0c;特别是气候序列中的趋势分析和突变点检测。以下是对M-K检验法的详细介绍&#xff1a; 一、定义与背景 M-K检验法由…

嵌入式初学-C语言-数据结构--四

栈 1. 基本概念 栈是一种逻辑结构&#xff0c;是特殊的线性表。特殊在&#xff1a; 只能在固定的一端操作 只要满足上述条件&#xff0c;那么这种特殊的线性表就会呈现一种“后进先出”的逻辑&#xff0c;这种逻辑就被称为栈。栈 在生活中到处可见&#xff0c;比如堆叠的盘子…

Kubernetes部署(haproxy+keepalived)高可用环境和办公网络打通

HAProxy Keepalived 部署高可用性入口&#xff1a; 部署两台或多台节点运行 HAProxy 作为负载均衡器。使用 Keepalived 实现 VIP&#xff08;虚拟 IP&#xff09;&#xff0c;为 HAProxy 提供高可用性。Keepalived 会监控 HAProxy 的状态&#xff0c;如果主节点失效&#xff0…

Spring AOP,通知使用,spring事务管理,spring_web搭建

spring AOP AOP概述 AOP面向切面编程是对面向对象编程的延续&#xff08;AOP &#xff08;Aspect Orient Programming&#xff09;,直译过来就是 面向切面编程,AOP 是一种编程思想&#xff0c;是面向对象编程&#xff08;OOP&#xff09;的一种补充。&#xff09; 面向切面编…

【C++二分查找】1482. 制作 m 束花所需的最少天数

本文涉及的基础知识点 C二分查找 LeetCode1482. 制作 m 束花所需的最少天数 给你一个整数数组 bloomDay&#xff0c;以及两个整数 m 和 k 。 现需要制作 m 束花。制作花束时&#xff0c;需要使用花园中 相邻的 k 朵花 。 花园中有 n 朵花&#xff0c;第 i 朵花会在 bloomDay…

南京网站设计手机用的网站

近年来&#xff0c;随着移动互联网的快速发展&#xff0c;越来越多的用户通过手机浏览网页&#xff0c;这使得网站设计逐渐向移动端倾斜。在南京&#xff0c;网站设计特别注重适配手机端&#xff0c;这不仅是用户体验的提升&#xff0c;也是市场竞争的需要。一个响应式的网站能…

vue3 v-bind=“$attrs“ 的一些理解,透传 Attributes相关说明及事例说明

1、可能小伙伴们经常会在自己的项目中看到v-bind"$attrs"&#xff0c;这个一般是在自定义组件中看到。 比如&#xff1a; <template><BasicModalv-bind"$attrs"register"registerModal":title"getTitle"ok"handleSubm…

前端框架有哪些 如何选择和优缺点

前端框架是用于构建用户界面的工具和库&#xff0c;它们提供了一套预定义的组件、样式和交互模式&#xff0c;帮助开发者更高效地开发前端应用。目前市面上存在多种前端框架&#xff0c;每种框架都有其独特的优势和缺点。以下是一些常见的前端框架及其优势和缺点的概述&#xf…

Python进程间网络远程通讯方式:socket、pipe、RPC详解!

背景 最近在进行开发工作的时候&#xff0c;遇到了一个场景&#xff1a; pc程序需要和安卓设备进行通讯和接口调用。 此时就需要进行远程调用方法。然而大学时代有关于远程过程调用的知识都还给了老师……所以在此进行一个复习&#xff0c;并进行实战演练&#xff01; 网络…

Java八股文总结四

集合类 一、什么是集合以及使用的好处&#xff1f;Java有哪些常见的集合类&#xff1f; 集合概念 集合就是一个放数据的容器&#xff0c;准确的说是放数据对象引用的容器 集合类存放的都是对象的引用&#xff0c;而不是对象的本身 集合类型主要有3种&#xff1a;set(集&…

Java语言程序设计基础篇_编程练习题*18.8 (以逆序输出一个整数中的数字)

目录 *18.8 (以逆序输出一个整数中的數字) 代码示例 输出结果 *18.8 (以逆序输出一个整数中的數字) 编写一个递归方法&#xff0c;使用下面的方法头在控制台上以逆序显示一个 int 型的值: public static void reverseDisplay(int value) 例如&#xff0c;reverseDisplay(1…

HTTP状态码304

304状态码的那些事 前言定义产生的原因304状态码出现过多会造成的问题状态码3XX&#xff08;重定向&#xff09; 前言 往往在我们开发中&#xff0c;有时候会遇到304状态码&#xff0c;很多的时候我们把他当作一个错误处理&#xff0c;那现在来聊聊这个304是怎么个事 定义 3…

【网络安全】URL解析器混淆绕过CSP实现XSS

未经许可,不得转载。 文章目录 前言正文前言 许多流行的静态网站生成器都存在图像 CDN 功能,它们通过优化网站中的图像来加快页面加载速度。例如: 1、Optimizing Images | Next.js 利用内置的 next/image 组件优化图像(nextjs.org) 2、Nuxt Image: Nuxt 应用的图像优化…

UE驻网失败问题(三)

这个问题是lab问题&#xff0c;现象如下&#xff1a; 期望UE注册在SA网络下&#xff0c;咋一看没有5G MIB/SIB1打印&#xff0c;好像是没搜到5G小区&#xff0c;而实际上并不是这样。 在查看搜网过程时会发现如下log打印&#xff1a; [I nr5g_rrc_acq.c 3544] RRC ACQ: Band 41…

一个全面、先进、公平且模块化的开源RAG框架

两个关键问题限制了 RAG 的发展&#xff1a; 新型 RAG 算法之间缺乏全面和公平的比较。 像 LlamaIndex 和 LangChain 这样的开源工具使用了高级抽象&#xff0c;这导致了透明度的缺失&#xff0c;并限制了开****发新算法和评估指标的能力。 RAGLAB&#xff1a;是一个模块化的…