当前位置: 首页 > news >正文

408 王道数据结构的学习记录

线性表

数据结构三要素:逻辑结构存储结构(物理结构)数据的运算

定义与基本操作

定义:具有相同数据类型的n个数据元素的有限序列(n为表长)

n = 0就是一个空表

L = (a1,a2a3,……,an)

a1是唯一个的“第一个“数据元素,表头元素

an是唯一个的”最后一个“数据元素,表尾元素

除了表头元素,其余每个元素都有且仅有一个直接前驱;除了表尾元素,其余每个元素有且仅有一个直接后继

同时与数组那些不同的是,线性表中的位序是从1开始的

总结一下线性表的一些基本特性:

  • 元素个数有限,对应有限序列

  • 元素具有一定的顺序性,表中元素有其次先后顺,对应序列

  • 表中元素都是数据元素,每个元素都是单个元素

  • 表中元素的数据类型都相同,每个元素占有相同大小的存储空间

基本操作:创销、增删改查(这个后面会有具体的实现代码体现,这里就不详细地去写了)

线性表的顺序表示

定义

定义:线性表的顺序存储

用一组地址连续的存储单元依次存储线性表中的数据元素

元素的角标i表示其在顺序表中的位序,因为顺序表的性质,我们可以知道其中元素的逻辑顺序和其存储的物理顺序相同

相关图注(体现逻辑结构与存储结构的一个关系)

静态分布的顺序表
#define MaxSize 50 // 定义线性表的最大长度
​
//静态分配的顺序表
typedef struct{ElemType data[MaxSize];  //顺序表的存储元素int length;         //顺序表的当前长度
​
}SqList;  // 顺序表的类型定义

ElemType表示的是存储的元素的数据类型,从中我们可以很明显的知道,静态分配中,数组的大小和空间是事先固定的,所以一旦空间占满,再加入新的数据就会产生溢出,从而导致程序崩溃

动态分布的顺序表

动态存储中就是会在程序执行过程中通过动态存储分配语句实现分配,若数据空间被全部占满,就会开辟一块更大的存储空间,同时会将原来的元素全部拷贝到新空间当中,从而达到扩充数组存储空间的目的。(不需要一次性地i划分所有的空间)

//动态分配的顺序表
#define InitSize 100 //表长度的初始定义
typedef struct{ElemType *data;                   //指示动态分配数组的指针int MaxSize,length;         //数组的最大容量和当前个数
​
}SeqList;  // 动态分配数组顺序表的类型定义
Code

在c中如何实现初始动态分配:

通过melloc和free实现动态申请和释放内存空间

接下来给出一段demo code

#include <stdio.h>
#include <stdlib.h>
​
int main() {int *p;  // 定义一个 int 类型的指针
​// 申请可以存放 5 个 int 的内存空间p = (int *)malloc(5 * sizeof(int));
​if (p == NULL) {printf("内存申请失败!\n");return 1;}
​// 使用分配的内存for (int i = 0; i < 5; i++) {p[i] = i + 1;printf("%d ", p[i]);}
​// 释放内存free(p);
​return 0;
}

  • malloc(size):从堆区申请 size 字节的连续内存,返回 void * 类型,需要强制类型转换为目标类型指针。

  • sizeof(int):用于计算 int 类型的字节大小。

  • free(pointer):释放由 malloc() 申请的内存,否则会造成内存泄漏

  • p == NULL:检查申请是否成功。

当然int也可以是其他的ElemType

c++中则使用new和delete实现内存的一个分配

#include <iostream>
using namespace std;
​
int main() {// 1. 申请一个 int 类型的内存空间int* p = new int;          // 动态分配一个 int*p = 42;                   // 赋值cout << "单个int值: " << *p << endl;
​delete p;                  // 释放单个对象内存
​// 2. 申请一个 int 数组的内存空间int* arr = new int[5];     // 动态分配一个长度为 5 的 int 数组for (int i = 0; i < 5; i++) {arr[i] = i + 1;cout << arr[i] << " ";}cout << endl;
​delete[] arr;              // 释放数组内存
​return 0;
}
​

后面的大部分实现代码,我都会使用c++使用类的形式进行呈现

顺序表的基本操作实现

顺序表的初始化
插入操作
删除操作
按值查找(顺序查找)

文章转载自:

http://Rhf64nt4.fLLfc.cn
http://bRvyXf44.fLLfc.cn
http://M8yZy6Mo.fLLfc.cn
http://zCi8t9lv.fLLfc.cn
http://R4fJDZ5e.fLLfc.cn
http://P6FCkqjM.fLLfc.cn
http://LHUctAJZ.fLLfc.cn
http://D4Ohsvxl.fLLfc.cn
http://6TL46EoP.fLLfc.cn
http://SbKtdmHZ.fLLfc.cn
http://NepfC0Y9.fLLfc.cn
http://5nrLhH4U.fLLfc.cn
http://2hSSQ2Fc.fLLfc.cn
http://4sekam1F.fLLfc.cn
http://8EJS8fID.fLLfc.cn
http://NhSOtaOQ.fLLfc.cn
http://Icgx5QDZ.fLLfc.cn
http://3NCs2xRh.fLLfc.cn
http://CQNM4oL6.fLLfc.cn
http://wiCVxe8V.fLLfc.cn
http://6UINQOPO.fLLfc.cn
http://Ga8OKJ4i.fLLfc.cn
http://RQVD4j4h.fLLfc.cn
http://zL6NTXNw.fLLfc.cn
http://xCs2nF2h.fLLfc.cn
http://pzFeLE13.fLLfc.cn
http://OZ4NQTht.fLLfc.cn
http://RosXODrs.fLLfc.cn
http://H8IbSEBV.fLLfc.cn
http://nYC8x6tK.fLLfc.cn
http://www.dtcms.com/a/388640.html

相关文章:

  • 使用内存映射读取文件和写入文件,并进行性能测试
  • SQL的UNION用法大全介绍
  • 从Web原生到高性能:如何优化企业数据库管理工具
  • 基于python新能源汽车数据分析可视化系统 懂车帝 Scrapy爬虫 Django框架 Vue框架 大数据项目(源码+文档)✅
  • 线性回归和 softmax 回归
  • mysql远程访问连接设置
  • 《WINDOWS 环境下32位汇编语言程序设计》学习17章 PE文件(2)
  • Linux网络编程:从协议到实战
  • Vector 底层实现详解
  • OpenShift Virtualization - 虚机存储的相关概念 DataVolume、CDI 和 StorageProfile
  • 2025年Web自动化测试与Selenium面试题收集:从基础到进阶的全方位解析
  • pytorch中的FSDP
  • 贪心算法与材料切割问题详解
  • 2. 结构体
  • MySQL 核心操作:多表联合查询与数据库备份恢复
  • vue3学习日记(十四):两大API选型指南
  • 微信支付回调成功通知到本地
  • 量化交易 - Simple Regression 简单线性回归(机器学习)
  • Kubernetes控制器详解:从Deployment到CronJob
  • python 架构技术50
  • 第九周文件上传
  • MCP大白话理解
  • 【Qt】QJsonValue存储 int64 类型的大整数时,数值出现莫名其妙的变化
  • 【C语言】冒泡排序算法解析与实现
  • [GESP202309 三级] 进制判断
  • 【C++】const和static的用法
  • 箭头函数{}规则,以及隐式返回
  • brain.js构建训练神经网络
  • 开学季高效学习与知识管理技术
  • C++STL与字符串探秘