数据结构入门

一、开篇,我们先了解 什么是数据结构?

1.1官方解释:

数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科

1.2自我理解:

数据结构就是吧数据元素按照一定的关系组织起来的集合,用来组织和存储数据

1.3数据结构的分类

我们可以把数据结构分为逻辑结构和物理结构两大类

  • 1.3.1逻辑结构分类

    逻辑结构是从具体问题中抽象出来的模型,是抽象意义上的结构,按照对象中数据元素之间的相互关系进行分类的
其中 , 逻辑结构有四种基本类型:1.集合结构、2.线性结构、3.树状结构和图结构

  • 1.集合结构:结合结构中数据元素除了属于同一集合外,他们没有其他的关系
    在这里插入图片描述

  • 2.线性结构:线性结构中的数据元素存在一对一的关系;

在这里插入图片描述

  • 3.树形结构:树形结构中的数据元素存在多对一的层次关系;
    在这里插入图片描述
  • 4.图结构:数据元素之间是多对多的关系;
    在这里插入图片描述
  • 1.3.2物理结构的分类

逻辑结构在计算机中真正的表示方式成为物理结构,又可以叫做存储结构,常见的物理结构有顺序存储结构、链式存储结构。

  • 1.顺序存储结构
  • 把数据元素放到地址连续的内存单元里面,其数据间的逻辑关系和物理关系是一致的,我们常见的数组就是顺序存储结构。
    在这里插入图片描述

    当然,顺序存储结构也存在一定的弊端,就像生活中的派对,有人插队,也有人离开,处于变化,所以这时候就需要链式存储结构。

  • 2.链式存储结构
         是把数据元素存放在认识存储单元里面,这组存储单元是连续的,也可以是不连续的,此时,数据元素之间的关系,不能反映数据元素之间的逻辑关系,所以我们需要引入指针存放数据元素的地址,通过指针找到元素的地址。
  • 两者比较:
    在这里插入图片描述

二、线性表

  • 1.线性表的定义,什么是顺序表?

线性表是具有相同数据类型的n个数据元素的有限序列(n>=0),其中,n为表长,当n = 0时线性表是一个空表。若用L命名线性表,则其一般为

ai是线性表中的"第i个"元素线性表中的位序
a1是表头元素,an是表尾元素。
除了第一个元素除外,每一个元素有且仅有一个直接前驱;除了最后一个元素外,每个元素都有一个直接后继

在这里插入图片描述

  • 2.线性表的基本操作

  1. InitList(&L):初始化表。构建一个空的线性表L,分配内存空间
  2. Destroy(&L):销毁操作。销毁线性表,并且释放线性表L所占空间
  3. ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。
  4. ListDelete(&L,I,&e):删除操作。删除表中第i个位置的元素,并用e返回删除元素的值
  5. LocateElem(L,E): 按值查找操作。在表L中查找具有给定关键字值得元素。
  6. GetElem(L,I):按位查找操作。获取表L中第i个位置的元素的值
    小Tips:
    ①对数据的操作(记忆思路) —— 创销、增删改查
    ②C语言函数的定义 —— <返回值类型> 函数名 (<参数1类型> 参数1,<参数2类型> 参数2,……)
    ③实际开发中,可根据实际需求定义其他的基本操作
    ④函数名和参数的形式、命名都可改变(Reference:严蔚敏版《数据结构》) ⑤什么时候要传入引用“&” —— 对参数的修改结果需要“带回来”

*知识点:

在这里插入图片描述

三、顺序表

  • 1.顺序表的定义

顺序表—> 用顺序存储的方式实现线性表顺序存储。把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中去,元素之间的关系有存储单元的邻接关系来体现。

  • 2.顺序表的实现—静态分配

![在这里插入图片描述](https://img-blog.csdnimg.cn/e7e974daacdd4711949b5f352def3dfb.png
在这里插入图片描述
在这里插入图片描述

#define MaxSize 10    //定义最大长度
typdef struct{        
	ElemType data[MaxSize]; //用静态的‘数组’存放数据元素
	int length;      //顺序表的当前长度
}SqList;  // Sq:sequence ---->顺序  //顺序表的类型定义(静态分配方式) 
   
// 给各个数据元素分配连
//续的存储空间,大小为
//MaxSize*sizeof(ElemType)
  • 3.顺序表的实现—动态分配

在这里插入图片描述

#define InitSize 10  //顺序表的初始长度
typedef struct{
	ElemType *data;  //指示动态分配数组的指针
	int MaxSize;     //顺序表最大容量
	int length;		 //顺序表的当前长度
}SeqList;			 //顺序表的类型定义(动态分配方式)

在这里插入图片描述

  • 4.顺序表的特点

1 )随机访问。即可以在0(1)时间内找到第i个元素
2 )存储密度搞,每个节点值存储数据元素。
3 )拓展容量不方便(采用动态内存分配实现时,拓展长度的时间复杂度比较高)
4 ) 插入、删除操作不方便,需要移动大量元素。

*知识点

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小羊 : )

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值