数据结构(一)--预备知识和基础概念

一、结构体

1、定义

        用户自己定义的数据类型

2、语法

2.1.1

        struct 【结构体名】{

        数据类型 成员变量1;

        数据类型 成员变量2;

        ...

        }

2.1.2

        typedef struct 【结构体名】{

        数据类型 成员变量1;

        数据类型 成员变量2;

        ...

}【结构体重命名】;//之后可以用结构体重命名代替 struct 【结构体名】

2.2

        【结构体重命名】+ 【结构体变量名】 = {.成员变量1 = ,.成员变量2 = ,...}//定义结构体变量并初始化

2.3

       【结构体重命名】 + 【结构体变量名】. 【结构体成员变量】//访问结构体成员变量

2.4

        【结构体重命名】 + *【指针变量名】= 【结构体变量的地址】 //定义结构体指针变量

2.5

        【指针变量名】->【结构体成员】== *【指针变量名】.[结构体成员]//访问结构体指针所指向的结构体变量的成员

二、malloc()/free()函数

1、malloc函数

1.1功能

        在堆区申请空间

1.2头文件

        #include <stdlib.h>

1.3参数与返回值

        形参为给结构体开辟空间的大小,一般使用sizeof求结构体大小

        返回值为void * 指针类型,所以使用时需要强转为要开辟空间的结构体指针类型

2、free函数

2.1功能

        释放推区申请的空间

2.2头文件

        #include <stdlib.h>

2.3参数与返回值

        形参为结构体变量地址,一般用结构体指针

        无返回值

特别注意:在堆区手动开辟的空间,到使用结束后一定要释放,同时将结构体指针指向空。未释放空间会造成内存泄漏。释放后未将结构体指针指向空,可能会造成非法访问。

三、数据结构基础知识

1、概念

        数据结构研究数据与数据之间的关系,分为逻辑关系、存储关系、运算关系。

1.1

        逻辑关系:线性关系和非线性关系。//如果一个元素或节点只有一个前驱和一个后继就称为线性关系

        存储关系:顺序存储和链式存储。//顺序存储用数组实现,在内存空间连续存储。链式存储用指针实现,在内存空间不连续存储。

        运算关系:元素或节点的增加,删除、修改、查找,排序。

2、三种数据结构

2.1表结构-每一行叫做一个元素或记录,元素与元素之间满足逻辑线性

        逻辑关系:线性

        存储关系:顺序存储--顺序表

                          链式存储--链表

        运算关系:增加,删除、修改、查找,排序

2.2树结构--每一个元素叫节点,每一个节点有且只有一个前驱,可以有多个后继

        逻辑关系:非线性

        存储关系:顺序存储

                          链式存储--二叉树

        运算关系:遍历

2.3图结构--每个节点可以有多个前驱,多个后继

        逻辑关系:非线性

        存储关系:顺序存储

                          链式存储

        运算关系:遍历

3、算法

3.1概念

        算法与程序的区别:

        算法的设计依赖逻辑,与程序无关

        算法的实现为程序

3.2算法的特点

        有穷性:算法执行的步骤是有限的

        确定性:每个计算步骤无二义性

        可行性:每个计算步骤能够在有限的时间内完成

        输入:算法可以有零个或多个输入

        输出:算法至少有一个输出

3.3时间复杂度

        算法的时间复杂度指算法中可执行语句的频度之和,用T(n)表示。//算出算法中每个语句的频度,相加得到时间复杂度。当n趋于无穷大时,T(n)与时间复杂度的数量级同阶无穷大,记T(n) =O(时间复杂度的数量级)

        特别注意:计算语句频度时,例如二维数组的遍历会进行两次for循环,第一次for循环会变判断n是否大于临界值才退出,因此实际上语句执行了n+1次。第二次for循环因为第一次for,循环体要循环n次,第二次for本身又会执行n+1次语句所以语句频度为n*(n+1)。

3.4

        一个好的算法需要满足:

        时间复杂度低

        空间复杂度低

        容易理解、容易编程和调试、容易维护

                          

        

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

丿浩子不是耗子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值