数据结构基本知识

一、什么是数据结构
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.xdnf.cn/news/1523239.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

摄影竞赛系统小程序的设计

管理员账户功能包括:系统首页,个人中心,教师管理,学生管理,辅导员管理,项目信息管理,作品信息管理,留言板管理,系统管理 微信端账号功能包括:系统首页&#…

【Leetcode】1-5

1 两数之和 1. 两数之和 - 力扣&#xff08;LeetCode&#xff09; 和为目标值 target 就是在找 target - nums[i] 利用 哈希表 查找只需要 O(1) class Solution {public int[] twoSum(int[] nums, int target) {HashMap<Integer, Integer> hm new HashMap<>();…

钢铁百科:NM360钢板材质、NM360机械性能、NM360韧性焊接性能

一、NM360钢板材质&#xff1a; NM360是一种高强度耐磨钢板&#xff0c;具有良好的综合机械性能和耐磨性能。它通常用于制造各种机械设备的耐磨部件&#xff0c;如挖掘机斗齿、破碎机锤头、磨煤机叶片等。NM360钢板的化学成分和热处理工艺被精心设计&#xff0c;以确保其在恶劣…

【Python知识宝库】深入理解Python中的字符串操作

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言一、字符串的创建1.1 使用引号创建字符串1.2 使用字符串函数创建 二、字符串的修改2.1 更改字符串的大小写2.2 拼…

心电调试笔记

原理图设计 注意事项 引脚连接检查&#xff1a;确保每个元器件与芯片引脚连接正确是基础&#xff0c;错误的连接可能导致系统无法正常工作。未连接引脚标识&#xff1a;对于未使用的引脚&#xff0c;虽然不连接但应标识为非使用状态&#xff0c;以免混淆或引起误操作。测试点设…

学学vue-1

vue 0 安装 装node.js&#xff0c;以及cnpm&#xff08;npm超时或者被屏蔽&#xff0c;安装cnpm国内镜像&#xff09; 查看安装版本&#xff08;是否安装成功&#xff09; node -v 安装成功之后也会安装npm npm -v cnpm镜像 npm install -g cnpm --registryhttp://registry.np…

哈希:哈希函数 | 哈希概念 | 哈希冲突 | 闭散列 | 开散列

&#x1f308;个人主页&#xff1a; 南桥几晴秋 &#x1f308;C专栏&#xff1a; 南桥谈C &#x1f308;C语言专栏&#xff1a; C语言学习系列 &#x1f308;Linux学习专栏&#xff1a; 南桥谈Linux &#x1f308;数据结构学习专栏&#xff1a; 数据结构杂谈 &#x1f308;数据…

GEE APP——Bellingcat 雷达影像监测平台分析

简介 许多军用雷达在开启时会干扰开源卫星图像。 一个新工具可以让任何人监控这些雷达部署的时间和地点。 该资源库包含该工具的源代码。 下面是该工具使用时的截图,其中有五个标注组件,我们将逐一查看。 在此示例中,该工具以驻扎在沙特阿拉伯达曼的 MIM-104 爱国者 PAC-2 …

早上醒来嗓子干、喉咙痛、咳嗽……快用这个润养好物,给嗓子做个spa,让身体润起来~

进入秋季&#xff0c;很多人出现了眼睛干涩、大便干燥、嘴唇干裂、咽喉疼痛等症状&#xff0c;虽说这些还能够忍受&#xff0c;但它却影响了正常的饮食和休息。 秋季气候干燥&#xff0c;外界燥邪侵犯肺部&#xff0c;易伤津液&#xff0c;肺失滋润&#xff0c;清肃失司&#x…

探讨马丁格尔策略应用的3问和昂首平台的3答

问&#xff1a;为什么在使用马丁格尔策略时要如此谨慎?毕竟最大的市场波动可能根本不会发生。 答&#xff1a;让我们以一个具体的例子来说明这个问题。假设我们进行交易&#xff0c;计算出一个小于最大预期值的市场动量&#xff0c;比如说这个值为90便士。试想&#xff0c;如…

Acunetix v24.8 发布,新增功能概览

Acunetix v24.8 发布&#xff0c;新增功能概览 Acunetix v24.8 (Linux, Windows) - Web 应用程序安全测试 Acunetix | Web Application Security Scanner 请访问原文链接&#xff1a;https://sysin.org/blog/acunetix/&#xff0c;查看最新版。原创作品&#xff0c;转载请保…

Linux---文件(1)---初识文件

目录 预备知识 文件操作接口 打开文件接口 重定向与文件操作关系 "w"方式与重定向 “a”方式与追加重定向 写入文件接口 读取文件接口 系统调用接口 参数解析 预备知识 我们知道&#xff0c;创建出一个空文件也要在内存中占空间。 文件文件内容文件属性 操…

网络安全服务基础Windows--第12节-域与活动目录

工作组 在Windows环境中配置⼯作组相对简单&#xff0c;适合⼩型⽹络环境&#xff0c;如家庭或⼩型办公室⽹络。⼯作组通过简单的⽹络共享和本地管理来实现资源共享&#xff0c;⽽不依赖于中央控制的服务器。 ● 定义&#xff1a;⼯作组是⼀种对等⽹络模型&#xff0c;在这种…

总结一下windows电脑字体模糊的优化方案

问题&#xff1a;谷歌浏览器上页面显示的字体非常细&#xff0c;有点费眼睛了&#x1f47e; 解决方案&#xff1a; 方案1&#xff1a;手动调整ClearType文本。方案2&#xff1a;英伟达显卡控制面板->管理3d设置->关闭全局平滑FXAA&#xff08;如果某个软件需要使用平滑处…

【vue css】background设置背景图片不显示问题

问题&#xff1a; 如上图所示&#xff0c;添加背景图片页面没有显示 解决&#xff1a; 添加background-position: center center 即可显示 但是不知道为什么添加这个属性就可以&#xff0c;求大神解惑

出现 /www/server/mysql/bin/mysqld: Shutdown complete 的解决方法

目录 1. 基本知识1.1 查找my.cnf目录1.2 配置错误日志2. 问题所示3. 原理分析4. 解决方法1. 基本知识 主要补充一些基本知识的拓展 1.1 查找my.cnf目录 查看mysql默认读取my.cnf的目录: mysql --help|grep my.cnf 截图如下:(为了方便查看具体使用的配置文件在哪个路径)…

数据库悲观锁和乐观锁的区别

前言 MySQL本身不直接提供悲观锁&#xff08;Pessimistic Locking&#xff09;和乐观锁&#xff08;Optimistic Locking&#xff09;的实现机制&#xff0c;因为这些锁的概念通常是在应用层面通过不同的策略和工具来实现的。然而&#xff0c;我们可以利用MySQL的一些特性来模拟…

泰克THDP0100(Tektronix)thdp0100高压差分探头详情资料

泰克 THDP0100 高压差分探头具有较大的差分动态范围功能&#xff0c;为用户提供了安全的高压测量探头解决方案。每个探头都配有两种尺寸的钩尖&#xff0c;并具有超范围视觉和声音指示器&#xff0c;当用户超出探头的线性范围时会发出警告。泰克 THDP0100 探头配备 TEkVPI 接口…

实训day42(9.3)

⼀、编排分类 单机容器编排: docker-compose 容器集群编排: docker swarm、mesosmarathon、kubernetes 应⽤编排: ansible(模块&#xff0c;剧本&#xff0c;⻆⾊) ⼆、系统管理进化史 1. 传统部署时代 早期&#xff0c;各个组织是在物理服务器上运⾏应⽤程序。 由于⽆法限…