笔记:数据结构

笔记:数据结构研究内容 1、用计算机解决实际问题时,步骤:首先分析实际问题,从中抽象出一个适当的数学模型,然后设计一个解决此数学模型的算法,最后编程,调试,测试。       寻求数据模型的实质是分析问题,从中提取出计算机处理的对象,并找出这些对象之间的关系,然后用数学的语言加以描述。       关键:分析问题中所用到的数据是如何组织的,研究数据之间存在什么样的关系。 2、由于数据必须在计算机中处理,因此不能局限 阅读详情

线性表

一、顺序表

1.1 顺序表——定义

静态分配
#define MaxSize 10
typedef struct{
    ElemType data[MaxSize];
    int length;
}SqList;
动态分配
#define InitMax 10
typedef struct{
    ElemType *data;
    int MaxSize;
    int length;
}SeqList;

1.2 顺序表——初始化

静态分配
void InitList(SqList &L){
    for(int i=0;i<MaxSize;i++){
        L.data[i]=0;
    }
    L.length=0;
}
动态分配
void InitList(SeqList &L){
    L.data=(ElemType*)malloc(InitSize*sizeof(ElemType));
    L.length=0;
    L.MaxSize=InitSize;
}

1.3 顺序表——增加长度

//增加动态数组的长度,增加长度为len
void IncreaseSize(SeqList &L,int len){
    int *p=L.data;
    L.data=(int*)malloc((L.MaxSize+len))*sizeof(int);
    for(int i=0;i<MaxSize;i++){
        L.data[i]=p[i];
    }
    L.MaxSize=L.MaxSize+len;
    free(p);
}

1.4 顺序表——插入

//在表L中的第i个位置/下标为i-1处插入指定元素e
void ListInsert(SqList &L,int i,int e){
    for(int j=L.length;j>i;j--){			//从后面的元素依次移动
        L.data[j]=L.data[j-1];
    }
    L.data[i-1]=e;
    L.length++;
    return true;
}
//bool类型实现插入操作——具有健壮性
bool ListInsert(SqList &L,int i,int e){
    if(i<1||i>L.length+1)
        return false;
    if(L.length>=MaxSize)
        return false;
    
    for(int j=L.length;j>i;j--){
        L.data[j]=L.data[j-1];
    }
    L.data[i-1]=e;
    L.length++;
    return true;
}

1.5 顺序表——删除

//删除表L中第i个位置的元素,并用e返回删除元素的值
void ListDelete(SqList &L,int i,int &e){
    if(i<1||i>L.length)
        return false;
    e=L.data[i-1];
    for(int j=i;j<L.length;j++){			//从前面的元素依次移动
        L.data[j-1]=L.data[j];
    }
    L.length--;
    return true;
}

1.6 顺序表——查找

按位查找
//查找表L中第i个位置的元素
ElemType GetElem(SqList &L,int i){
    return L.data[i-1];
}
按值查找
//查找表L中值为e的元素的位置
int LocateElem(SqList &L,ElemType e){
    for(int i=0;i<L.length;i++){
        if(L.data[i]==e)
            return i-1
    }
    return 0;			//查找失败,退出循环返回0
}
//int、char、float等可直接比较,但若e为结构类型,需定义一个比较函数
bool isCustomerEqual(Customer a,Customer b){
    if(a.num==b.num&&a.people==b.people)
        return true;
    else
        return false;
}

二、单链表

2.1 单链表——定义

typedef struct LNode{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

2.2 单链表——初始化

不带头结点
bool InitList(LinkList &L){
    L=NULL;
    return true;
}
带头结点
//带头结点的链表,操作更方便
bool InitList(SqList &L){
    L=(LNode*)malloc(sizeof(LNode));
    if(L==NULL)			//内存不足,分配失败
        return false;
    L->next=NULL;
    return true
}

2.3 单链表——插入

按位序插入(不带头结点)
//在表L中的第i个位置上插入元素e
bool ListInit(LinkList &L,int i,ElemType e){
    if(i<1)
        return false;
    if(i==1){									//比带头结点多考虑插入第一个结点的情况
        LNode *s=(LNode*)malloc(sizeof(LNode));
        s->data=e;
        s->next=L;
        L=s;
        return true;
    }
    
    LNode *p;				
    int j=1;			//不带头结点的单链表,设第一个结点下标为1(位置对应下标)
    p=L;
    while(p!=NULL&&j<i-1){			//p指向第i-1个结点,连接新结点到第i个位置
        p=p->next;
        j++;
    }
    if(p==NULL)			//插入位置不合法,可能i值过大
        return false;
    LNode *s=(LNode*)malloc(sizeof(LNode));
    s->data=e;
    s->next=p->next;
    p->next=s;
    return true;
}
按位序插入(带头结点)
bool ListInit(LinkList &L,int i,ElemType e){
    if(i<1)
        return false;
    LNode *p;
    int j=0;			//带头结点的单链表,设头结点下标为0,使第一个结点下标为1(位置对应下标)
    p=L;
    while(p!=NULL&&j<i-1){			//p指向第i-1个结点,连接新结点到第i个位置
        p=p->next;
        j++;
    }
    if(p==NULL)			//插入位置不合法,可能i值过大
        return false;
    LNode *s=(LNode*)malloc(sizeof(LNode));
    s->data=e;
    s->next=p->next;
    p->next=s;
    return true;
}
后插操作
bool InsertNextNode(LNode *p,ElemType e){
    if(p==NULL)
        return false;
    LNode *s=(LNode*)malloc(sizeof(LNode));
    if(s==NULL)			//内存分配失败,可能内存不足
        return false;
    s->data=e;
    s->next=p->next;
    p->next=s;
    return true;
}
//用“封装”在第i个位置插入元素e也可以化简为
bool ListInsert(LinkList &L,int i,ElemType e){
    if(i<1)
        return false;
    LNode *p;
    int j=0;
    p=L;
    while(p!=NULL&&j<i-1){
        p=p->next;
        j++
    }
    return InsertNextNode(p,e);
}
前插操作
//新结点后插操作,交换两结点数据
//p结点前插入元素e
bool InsertPriorNode(LNode *p,ElemType e){
    if(p==NULL)
        return false;
    LNode *s=(LNode)malloc(sizeof(LNode));
    if(s==NULL)
        return false;
    s->next=p->next;
    p->next=s;
    s->data=p->data;
    p->data=e;
    return true
}
//p结点前插入结点s
bool InsertPriorNode(LNode *p,LNode *s){
    if(p==NULL||s==NULL)
        return false;
    s->next=p->next;
    p->next=s;
    ElemType temp=s->data;			//引入temp交换数据域部分
    s->data=p->data;
    p->data=temp;
    return true;
}

2.4 单链表——删除

《大话数据结构》的笔记(作者: 程杰) 大话数据结构 程杰 第1章 数据结构绪论 2015-08-11 数据结构: 是相互之间存在一种或多种特定关系的数据元素的集合。 1.3 数据结构起源 2015-08-12 程序设计=数据结构+算法 1.4.5 数据结构 2015-08-12 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。 1.5.1 逻辑 阅读详情

相关推荐

王道考研:深入数据结构学习笔记

在计算机科学与技术领域,数据结构(Data Structure)是关于数据的组织、管理和存储的系统方法,是算法设计与程序开发的基础。具体来说,数据结构不仅包括数据元素本身的逻辑结构,还包括数据元素之间的关系以及数据的物理存储方式。数组是一种基本的数据结构,它由相同类型的元素的集合组成,这些元素可以通过计算一个索引来访问。数组中的每个元素都存储在连续的内存位置,这意味着元素可以通过索引直接访问,无需额外的查找时间。数组的结构特点可以总结如下:连续内存空间。

weixin_35578748的博客 1043

计算机考研数据结构高分笔记,2021版天勤计算机考研高分笔记系列:数据结构高分笔记(第9版)...

&nbsp&nbsp[导读]:2021版天勤计算机考研高分笔记系列:数据结构高分笔记(第9版)2021版天勤计算机考研高分笔记系列:数据结构高分笔记(第9版)为了帮助广大考生更好的复习硕士研究生招生考试,做好备考工作,易考吧书店上线了2021版天勤计算机考研高分笔记系列:数据结构高分笔记(第9版),希望此辅导资料能够为广大考生朋友带来实实在在的帮助,使每一位考生都能够学有所成,面对...

weixin_35278121的博客 1855

虎符+红明谷+ctfshow渔人杯赛后复现

目录标题虎符CTFWeb-签到MISC-你会日志分析吗红明谷CTFWeb-write_shellMISC-我的心是冰冰的ctfshow渔人杯签到抽奖感受下气氛神仙姐姐阿拉丁迷飘啊飘简单二维码我跟你拼了 虎符CTF Web-签到 参考详细分析PHP源代码后门事件及其供应链安全启示 根据文章提示,添加恶意请求头 User-Agentt: zerodiumphpinfo(); 可以看到phpinfo内容 继续构造,查看根目录下的文件 User-Agentt: zerodiumsystem('ls /');

Atkx's Blog 1985

数据结构与算法分析全流程笔记(二):树

数据结构:树 的学习笔记,简单地过一遍概念。

Wiayetr的博客 1639

CLCD土地覆盖数据在ArcGIS中的实战应用:从导入到空间分析的完整指南

本文详细介绍了CLCD土地覆盖数据在ArcGIS中的实战应用,从数据导入到空间分析的完整流程。涵盖坐标系转换、数据质量检查、土地利用变化检测等核心技术,并分享城市扩张模拟和跨数据集融合等高级应用技巧,帮助研究者高效利用这一权威数据集进行环境监测和城市规划。

weixin_29292535的博客 598

3GPP协议解读_NTN系列(一)_38.811_非地面网络(NTN)的背景、应用场景和信道建模

非地面网络覆盖广,对物理攻击和自然灾害有一定的抵抗性。本文根据3GPP协议对NTN网络的背景、应用场景和信道模型进行了整理。

JCMLSY的博客 4932

数据结构学习笔记:概论

数据结构是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素集合。它包含三方面的内容,逻辑关系、存储关系及操作。

WHNWZY的博客 1173

Python爬虫实战:公共资源交易平台招标数据采集实战 - 从零构建企业情报系统(附CSV导出 + SQLite持久化存储)!

我长期专注 Python 爬虫工程化实战,主理专栏 👉 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 1288

郝斌数据结构笔记02:数据结构概述

欢迎大家关注我的微信公众号【程序员向东】,本公众号专注分享Python、爬虫学习资料与干货!后台回复「PYTHON」,送你一个学习大礼包! 数据结构概述 严蔚敏的《数据结构》上是伪代码,高一凡将其用C和Java实现了。 1. 数据结构的定义 我们如何把现实生活中大量而复杂的问题以特定的数据类型(个体如何保存)和特定的存储结构(个体之间的关系),保存到主存储器(内存)中,以及在此基础上为实现某个...

向东的笔记本 383

信贷模型域——客户管理阶段模型(贷中模型)

本文主要探讨了信贷模型域中的客户管理阶段模型,重点聚焦于交叉销售模型。交叉销售模型不仅应用于贷中阶段,还贯穿于贷前、贷中、贷后全过程,其核心作用在于提升客户价值、增强客户粘性、降低流失率以及实现风险与收益的平衡。文中通过具体案例展示了交叉销售模型在现实业务中的应用,并指出其在贷中阶段的主要任务是提升存量客户价值、增加产品使用率,同时有效控制风险。

庄小焱 1886

Android 系统低内存lowmemorykiller关于阈值修改 minfreeAbsKbytes优化

在系统rom定制化开发中,在对于运行内存ram 1G和2G的设备中,对于内存使用高峰期时,minfreeAbsKbytes优化很关键 调整合理的minfree,让内存合理的使用很关键,接下来分析相关功能的实现

安卓兼职framework和app工程师的博客 524

轻松上手:<Android Studio笔记应用开发>(二)笔记可显示Part2:定义笔记的数据结构类型

在Android应用开发中,定义笔记的数据结构类型至关重要。💡 本文深入讨论了创建数据结构类型的目的、属性选择、属性表示方式、初始化和保护属性、以及扩展操作方法等关键问题。🔍 我们创建了一个名为NoteDataStructure的Java类,包含了id、content和time等属性,并演示了如何使用setter和getter方法以及其他操作方法,如格式化内容、计算字符数、生成摘要和检查关键词。🛠️ 这些基本概念和操作为构建强大的Android笔记应用奠定了坚实的基础。📱

qq_73342379的博客 484

LVGL v8学习笔记 | 09 - 进度条控件的使用方法(bar)

lv_bar_set_range必须放在lv_bar_set_mode前面,否则不生效。bar对象的API在lv_bar.h中声明,以lv_bar_xxx命名。此事件可以用来在进度条更新值之后更新别的控件(比如进度条旁边的文字)。可以看到,默认创建的进度条值是0到100。(3)设置进度条的范围值(最大值和最小值)(2)获取进度条的起始值。(3)获取进度条的最小值。(4)获取进度条的最大值。(1)设置进度条的当前值。(2)设置进度条的起始值。(1)获取进度条当前值。(5)获取进度条的模式。

Mculover666的博客(嵌入式) 1730

自学笔记:数据结构

数据结构 ##2.1 数据结构 根据韩顺平老师的数据结构与算法视频学习的 包括:线性结构和非线性结构 线性结构:最常用的数据结构。特点是数据与元素之间存在一对一关系,例如数组,队列,链表,栈等。按照存储结构又分为顺序存储结构和链式存储结构。 顺序存储结构:元素的存储地址值是连续的。例如数组。 链式存储结构:元素的存储地址值不一定是连续的,元素节点存放又数据以及相邻节点的信息。例如链表。 非线性结构:树结构,图,多维数组等。 2.1.1 字符串 2.1.2 数组 稀疏数组(Sparse

qq_41117613的博客 887

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

数据结构:笔记

1、顺序表的平均比较次数:(n+1)/ 2 解析】在顺序表中查找,最好情况下第一个元素就是要查找的元素,则比较次数为 1 ;在最坏情况下,最后一个元素才是要找的元素,则比较次数为 n 。两种情况平均即( 1+n ) /2 。 2、顺序表的平均查找长度:(n+1) /2 第一个数的比较次数为1,第二个数的比较次数为2。。。以此类推第N个数的比较次数为N,所以总的比较次数为1+2+…+N=N(N+1)/2,平均比较次数为(N+1)/2,也即平均查找长度。 3、在ASC算法team日常开发中,常常面临一些数据结构

世上再无张显宗 7301

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

大话数据结构笔记【1】:数据结构绪论

【学习来自程杰《大话数据结构》】数据类型是按照值的不同进行划分的。在高级语言中,每个变量、常量和表达式都有各自的取值范围。类型就用来说明变量或表达式的取值范围和所能进行的操作。

是谢添啊 1082

数据结构笔记:树

原文地址 分类目录——数据结构笔记 概念 树是一种抽象数据结构(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下特点 每个节点有0个或多个子节点; 没有父节点的节点成为根阶段; 每一个非根节点有且只有一个父...

BBJG_001的博客 2370

【数据结构与算法之美】笔记一:入门篇 | 什么是数据结构和算法?

笔记来自王争老师的《数据结构与算法之美》课程,学习之余,整理的笔记。 内容为精简版,便于日后复习以及查阅。如有需要,推荐购买专栏课程。 课程地址:https://time.geekbang.org/column/126 文章目录什么是数据结构?什么是算法?学习重点学习技巧 什么是数据结构?什么是算法? 大部分数据结构和算法教材,在开篇都会给这两个概念下一个明确的定义。但是,这些定义都很抽象,对理解这两个概念并没有实质性的帮助,反倒会让你陷入死抠定义的误区。毕竟,我们现在学习,并不是为了考试,所以,概念背.

SunshineSki的博客 363

郝斌数据结构笔记01:课程笔记大纲

此数据结构笔记系列是笔者向东在学习郝斌老师【数据结构自学视频】这门课的学习记录,该课程可在哔哩哔哩免费学习,点击前面括号中课程名字可以直达课程页面。 同时欢迎大家关注我的微信公众号【程序员向东】,本公众号专注分享Python、爬虫学习资料与干货!后台回复「PYTHON」,送你一个学习大礼包! 1.学习大纲 数据结构概述 预备知识 模块一:线性结构 连续存储(实际上就是数组) ...

向东的笔记本 525

数据结构随笔记: 队列

队列是一种具有先进先出(FIFO)特性的线性数据结构,它由一系列元素组成,这些元素按照入队和出队的顺序进行操作。队列通常包含以下几个重要的属性和操作:队列的大小(Size):表示队列中元素的个数。队列的容量(Capacity):表示队列能够容纳的最大元素个数。队列的头部(Front):表示队列中第一个元素。队列的尾部(Rear):表示队列中最后一个元素。入队(Enqueue):将一个元素添加到队列的尾部。出队(Dequeue):从队列的头部移除一个元素。

DaPiCaoMin的博客 1449

02专升本数据结构笔记 第二章:线性表

线性表是由n(n≥0)个类型相同的数据元素a1,a2,…,an组成的有限序列,数据元素之间是一对一的关系,记作(由n(n≥0)个类型相同的数据元素,组成的有限序列,数据元素之间是一对一的关系,为线性表)可以理解为有序数组。

lxttzlove的博客 2349

数据结构笔记6:查找

目录 查找基本概念: 线性结构 顺序查找 有序顺序查找 折半查找 分块查找 题目 树形结构 B树 m阶的B树性质: 操作 B+树 题目 散列表 构造 直接定址法 除留余数法 数字分析法 平⽅取中法 折叠法 处理冲突 开放定址法 拉链法 查找效率 题目 串 逻辑结构(定义) 存储结构(物理结构) 顺序存储 链式存储 运算(操作) KMP nextvel 题目 没学过完整数据结构课就搞算法的坏处就是,很多稍微复杂一点的数据结构,自己暴力解出来

越开源越幸运 3819

数据结构笔记:1 绪论

数据结构笔记:1.1数据结构的基本概念数据结构的基本概念 数据结构的基本概念 基本概念 数据:     数据:所有能输入到计算机中并被计算机程序识别和处理的符号。     数据对象:具有相同性质的数据元素的集合,是数据的一个子集。     数据元素:数据的基本单位。  ...

dxt_snow的博客 196

王道数据结构与算法:完整笔记

基于著名书籍和自我学习得出的王道数据结构理论知识笔记

修行的凡人的博客 4078
上一篇: 笔记:计算机组成原理
下一篇: 笔记:离散数学
ITS_Oaij
博客等级 码龄6年 1857粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值