数据结构基本知识

一、什么是数据结构
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.mfbz.cn/a/872826.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

移远通信高端5G智能模组SG560D-NA率先通过PTCRB认证

近日,移远通信宣布,其基于高通QCM6490平台打造的高端5G智能模组SG560D-NA顺利通过PTCRB认证。 在此之前,该模组还获得了美国FCC和加拿大IC认证,这意味着,其已完全满足北美地区的相关标准和规定,能够支持相关…

【AI大模型应用开发】2.1 Function Calling连接外部世界 - 入门与实战(1)

Function Calling是大模型连接外部世界的通道,目前出现的插件(Plugins )、OpenAI的Actions、各个大模型平台中出现的tools工具集,其实都是Function Calling的范畴。时下大火的OpenAI的GPTs,原理就是使用了Function Cal…

C++ | Leetcode C++题解之第355题设计推特

题目&#xff1a; 题解&#xff1a; class Twitter {struct Node {// 哈希表存储关注人的 Idunordered_set<int> followee;// 用链表存储 tweetIdlist<int> tweet;};// getNewsFeed 检索的推文的上限以及 tweetId 的时间戳int recentMax, time;// tweetId 对应发送…

828华为云征文 | 华为云Flexus X实例上实现Docker容器的实时监控与可视化分析

Docker容器监控之 CAdvisorInfluxDBGranfana 需要了解 本文章主要讲述在 华为云Flexus X 实例上搭建开源的容器管理平台&#xff0c;使用的Web UI界面来简化和优化容器及集群的管理和监控选择合适的云服务器&#xff1a; 本文采用的是 华为云服务器 Flexus X 实例&#xff08;…

Prefetch文件分析

目录 介绍步骤 介绍 Prefetch&#xff08;预读取&#xff09;&#xff0c;从Windows XP开始引入&#xff0c;用来加速应用程序启动过程。Prefetch包含可执行文件的名称、文件时间戳、运行次数、上次执行时间、Hash等。Win7上记录最近128个可执行文件的信息&#xff0c;Win8-10…

正点原子STM32F103+ESP8266+DS18B20+DHT11连接阿里云

文章目录 MQTT协议1. 基础知识2. 报文形式3. 连接报文4. 心跳报文5. 订阅报文5.1. 订阅主题报文SUBSCRIBE5.2. 订阅确认SUBACK5.3. 取消订阅UNSUBSCRIBE5.4. 取消订阅确认UNSUBACK 6. 发布报文6.1. 发布消息PUBLISH6.2. 发布确认PUBACK 7. 阿里云账号创建8. 网络调试助手接入阿…

Java | Leetcode Java题解之第389题找不同

题目&#xff1a; 题解&#xff1a; class Solution {public char findTheDifference(String s, String t) {int ret 0;for (int i 0; i < s.length(); i) {ret ^ s.charAt(i);}for (int i 0; i < t.length(); i) {ret ^ t.charAt(i);}return (char) ret;} }

Matplotlib 颜色设置详解

在使用matplotlib进行颜色绘制的时候,如绘制图表、背景色或者对文字设置的时候都可以配置颜色, 以下说明主流的三种颜色使用方法 颜色名称 可以是直接使用颜色名称的字符串对color进行赋值,包括可以使用首字母缩写或者完整拼写的形式,以下为部分颜色的书写形式 缩写版 • …

Spring Boot 多数据源配置(JPA)

目录 前言 前置环境 pom yml Entity Dao Config Controller 演示 前言 一般一个系统至少有一个数据源&#xff0c;用来持久化业务数据以及查询。单个数据源的系统很常见&#xff0c;在 Spring Boot 框架下配置也很简单。在约定大于配置这个思想下&#xff0c;只需要在…

递推,CF 353D - Queue

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 353D - Queue 二、解题报告 1、思路分析 手玩一下&#xff0c;我们发现相…

[数据集][目标检测]人脸口罩佩戴目标检测数据集VOC+YOLO格式8068张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8068 标注数量(xml文件个数)&#xff1a;8068 标注数量(txt文件个数)&#xff1a;8068 标注…

uniapp写的一个年月日时分秒时间选择功能

代码: <template><view><picker mode"multiSelector" :value"multiIndex" :range"multiRange" change"onMultiChange"><view class"picker">当前选择&#xff1a;{{ formattedDateTime }}</vie…

VisualStudio环境搭建C++

Visual Studio环境搭建 说明 C程序编写中&#xff0c;经常需要链接头文件(.h/.hpp)和源文件(.c/.cpp)。这样的好处是&#xff1a;控制主文件的篇幅&#xff0c;让代码架构更加清晰。一般来说头文件里放的是类的申明&#xff0c;函数的申明&#xff0c;全局变量的定义等等。源…

大路灯护眼灯有必要吗安全吗?性价比高落地护眼灯推荐

大路灯护眼灯有必要吗安全吗&#xff1f;近几年来&#xff0c;随着生活节奏的加快&#xff0c;目前青少年的近视率呈现一个直线上升的趋势&#xff0c;其中占比达到了70%以上&#xff0c;并且最令人意外的是小学生竟然也占着比较大的比重&#xff0c;这一系列的数据不仅表明着近…

MySQL(CRUD)

MySQL mysql -u root -ply MySQL的三层结构 1.安装MySQL数据库本质就是在主机安装一个数据库管理系统(DBMS),这个管理程序可以管理多个数据库. 2.一个数据库中可以创建多个表,以保存数据 SQL语句分类 1.DDL:数据定义语句[create 表,库] 2.DML:数据操作语句[增加insert,修改…

【Java】基于JWT+Token实现完整登入功能(实操)

Java系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 文章目录 Java系列文章目录一、前言二、学习内容&#xff1a;三、问题描述四、解决方案&#xff1a;4.1 认识依赖4.2 使用JWT4.3 登入实现4.4 配置拦截器4.5 获取数据 五、总结&…

EMC技术

目录 EMC 天线效应 公式 措施 EMC测试 展频技术 如何展频 OTA测试 EMC 三大要素&#xff1a;干扰源、传输介质、敏感设备。 EMI&#xff1a;Electromagnetic Interference&#xff0c;电磁干扰。 EMS&#xff1a;Electro Magnetic Susceptibility&#xff0c;电磁抗扰…

二百五十九、Java——采集Kafka数据,解析成一条条数据,写入另一Kafka中(一般JSON)

一、目的 由于部分数据类型频率为1s&#xff0c;从而数据规模特别大&#xff0c;因此完整的JSON放在Hive中解析起来&#xff0c;尤其是在单机环境下&#xff0c;效率特别慢&#xff0c;无法满足业务需求。 而Flume的拦截器并不能很好的转换数据&#xff0c;因为只能采用Java方…

JVM系列(十) -垃圾收集器介绍

一、摘要 在之前的几篇文章中,我们介绍了 JVM 内部布局、对象的创建过程、运行期的相关优化手段以及垃圾对象的回收算法等相关知识。 今天通过这篇文章,结合之前的知识,我们一起来了解一下 JVM 中的垃圾收集器。 二、垃圾收集器 如果说收集算法是内存回收的方法论,那么…

集成电路学习:什么是NOR Flash Memory非易失性闪存存储器

一、NOR Flash Memory&#xff1a;非易失性闪存存储器 NOR Flash Memory&#xff0c;即非易失性闪存存储器的一种&#xff0c;是Flash存储器的一个重要分支。Flash存储器&#xff0c;又称为闪存&#xff0c;结合了ROM&#xff08;只读存储器&#xff09;和RAM&#xff08;随机存…