c语言中point的用法_《数据结构C语言》-随教材-严蔚敏

6a497046a9c35f9c0b1f352787466b6f.png

写在前面:

比较杂,比较乱,自己喜欢就好。

用的软件:CodeBlocks、DevC++。(用的C++语言)

CodeBlocks中的注释快捷键:

4e20f5e979a3d8f97d929bf0daed8962.png

CodeBlock 更改注释颜色:

baa6cd954259be0f0ad9902165dd7ac6.png

C语言编程实例:

C语言编程实例​c.biancheng.net

ADT:抽象数据类型,包含:数据对象、数据关系、基本操作。

(1)C语言中函数参数传递的三种方式

C语言中函数参数传递的三种方式_魏波-CSDN博客_函数参数传递​blog.csdn.net
b3a6d00975944f44297bee972b5a8faa.png

24e10b31f4145cc97f2e07b294676745.png

7c38324333af498a6221998b070310f9.png

(2)cin的用法及清空输入缓冲区问题

cin的用法及清空输入缓冲区问题_zhao708981169的专栏-CSDN博客_cin清空缓冲区​blog.csdn.net

166a9adbcd4f2a807bc4b22416434198.png

(3)Fibonacci(斐波拉契)数列

斐波那契数列编程C语言_时光若止的博客~Dale-CSDN博客_斐波那契数列c语言​blog.csdn.net
a45622f3c2e07610710d4e735e7eb98b.png

e40d07b9d4be8f5f3cbb83c5b67f2114.png

83c435fff7e70c7b5a4f585a13a0fe77.png

(4)求数组的长度、申请空间

int len = sizeof(arr) / sizeof(arr[0]);

int *base = ( int * )malloc( sizeof(int) * 长度);

int *newbase = ( int * )realloc( sizeof(int) * 新长度);

(5)时间复杂度记录

***链表的插入、删除:O(n) P30页

b7f3d9598b74eaebcb5e2e44d191196c.png

矩阵的转置:简单方法:O(nu*tu) 快速转置:O(nu+tu)

(6)八皇后问题-递归问题( 共有92种方法 )P57-栈

在国际象棋棋盘上(8*8)放置八个皇后,使得任意两个皇后之间不能在同一行,同一列,也不能位于同于对角线上。问共有多少种不同的方法,并且指出各种不同的放法。

c70b254a3c30eae20adf4fba64464b3e.png
八皇后棋盘

学习八皇后视频:

懒猫老师-C语言-递归函数-八皇后问题(搜索,回溯)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com
918b4ceefd413ef247bf4a5e92ce7b41.png
经典回溯算法(八皇后问题) - 雪狼的程序故事 - 博客园​www.cnblogs.com
Queen.cpp
970
·
百度网盘

(7)Hanoi汉洛塔(c语言实现)-递归问题 P57-栈

a、b、c三座塔,将n个从小到大(自上而下)的圆盘从a移动到c,移动期间小圆盘必须在大圆盘上面,问移动步骤。

汉诺塔(c语言实现)_xiaofeilong321的专栏-CSDN博客_汉诺塔c语言​blog.csdn.net
062f5b0e02e60d53429f88bcc7327be1.png

在线Hanoi小游戏:

汉诺塔小游戏​www.hannuota.cn

学习Hanoi视频:

懒猫老师-C语言-汉诺塔问题详解(hanoi)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com
f44d08e213c7147055f5ec06bdccce40.png

51ed17ca5ddbe375dd8235482f0096d1.gif

2ab68298a363e1c5e393d44e8dfa97a4.png
X经由Z到Y,再Y经由X到Z。move打印一下移动轨迹。

3137510a001aa228e5e205f50621f67a.png

018f512a5829da7d9193166994438b38.png

(8)栈(Last In First Out):LIFO先进后出

队列(First In First Out):FIFO先进先出(使用场景:层次遍历、树的广度优先搜索)

(9)【C++】数组讲解之字符数组和字符串

【C++】数组讲解之字符数组和字符串​mp.weixin.qq.com
9a8f9fbffcf5e9d530135eb81ad037df.png

3ecbbc0709a5300824b016c1445847a8.png

真题训练1:

b987191299e112fc79e9151c258efc8a.png
https://mp.weixin.qq.com/s?src=11&timestamp=1596246262&ver=2495&signature=3NhcNViCb6DmCT8Y3HYpserNhy8sK2o2wkFeaUug0tzQAFSf7Mcw6eocOPnAT6VAoHK6xxWYoOsUuVW88R-jlafwOEl0hb3N7fg9u*BewBmKOSb9wYIoAjqbq9KpXI5P&new=1​mp.weixin.qq.com

a347ab3be32bfe5764d557f6e20c0f06.png

e357ffbe0f1268354ce2de04dc43ebc9.png
在30行的for循环前面加上:if(arr[0] >=2) return 1;
caogao.cpp
1.5K
·
百度网盘

第1章:绪论

1.数据结构(data structure)是相互之间存在一种或多种特定关系的数据元素的集合。(P5)

e878a109c1a3ebaca22da93b878609a4.png

2.抽象数据类型(Abstract Data Type,简称ADT)是指一个数学模型以及在该模型上的一组操作。(P7)

3.ADT的重要特征:数据抽象、数据封装。(P8)

e5e37bbe5fcf887a6af900cfe98002da.png

4.书中伪代码的提前约定(部分)P10

3ca315c6d2428206f9c05590f7e63e7f.png

逻辑运算约定:【短路现象】

与运算&&:对于A&&B,当A值为0时,不再对B求值。

或运算||:对于A||B,当A的值为非0时,不再对B求值。

5.三元组(Triplet)的基本操作实现 (P12)

94a3a34a456a77f5ff701df0a86752fa.png

d086611267402df7f57bb59fa986084f.png

dc91d157307abe56ece5f276579f6a63.png

6.算法的5个重要特性 (P13)

有穷性、确定性、可行性、输入、输出。

算法设计的要求:

正确性、可行性、健壮性、效率与低存储量需求。

7.时间复杂度、空间复杂度

时间复杂度和空间复杂度​mp.weixin.qq.com
4680e466bdf37382f33cc2960a3c82ed.png

第2章:线性表

1.线性表的定义 P18

4db240c30510e635aabcf12a6c8da39d.png

0f6d953426e2e1b3116546227e0e5cb2.png

2.集合A∪B (P20)

2359deaacdeafbbe95c174679c2fe657.png

3.归并La和Lb得到的新表Lc,Lc的数据元素也是按照非递减排序

6b2290faab8ce29cb93b0f0079803b05.png

4.线性表的顺序表示和实现

(1)顺序表特点(P21)

①线性表的顺序表示,指的是用一组地址连续的存储单元依次存储线性表的数据元素。

②以元素在计算机内的“物理位置地址”相邻来表示线性表中数据元素之间的逻辑关系。

③对于顺序表的所有元素可以进行顺序/随机访问

Loc(ai) = Loc(a1) + (i-1)*L;

④删除、插入元素需要移动大量元素

*****由于数组类型也具有随机存取的特点,因此通常用数组来描述数据结构中的顺序存储结构。*****由于线性表的长度可变,则在C语言中可用动态分配的一维数组。

32ea2a72ff7e66723b74e4c65cc4360e.png

(2)构造函数:

710b653e1dc0547563c51286ff2c32cb.png

(3)插入元素:考虑内存空间、边界条件的情况,返回数组长度

realloc函数的用法:

070523d959c38fb69b29ec83f1acc47c.png
realloc函数的用法_落影无痕-CSDN博客_realloc函数​blog.csdn.net

b6f9f81a5360176806e1866e5dff5929.png

(4)删除元素:并返回所删除的元素值

c6c4ddc9861e44940f5ca0cdbd55c716.png

(5)顺序查找:返回在表中的位置

d3d8b2d5ffa7beea26c0e4547135238a.png

(6)折半查找:

fab3ab8e718840e25db2b15b9613c153.png

5.线性表的链式表示和实现

***顺序表比链式表存储密度更高。***

(1)链表特点(P27)

①用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。

结点(node):包括两个域,其中存储数据元素信息的域称为数据域;存储直接后继位置的域称为指针域

②数据元素之间的逻辑关系是由结点中的指针指示的。

③单链表是非随机存取的存储结构。

④删除、插入元素需要移动大量元素

e8b4da7f830ce4311278b0912c9605d6.png

8665c9a3eb9110799e0a68c63790d68a.png

(2)构造函数(头插法、尾插法)

ac414949401c8a2f6e41939fb9b23c57.png

da0c57f2d81a8c11114ba113311899ff.png
头插法

头插法:

7925d1c4b4c8a26b9a3cb006c080998c.png

c198a64ed60d5b2e80e0f852467bdab7.png
尾插法

尾插法:

826dca2aa91f6eb61c12f0036871769a.png

(3)查找元素

63935a00a8d4d58fb8041f1ae8aa86c3.png

(4)插入元素

6d48bdb967f33697fe6e0f008a876278.png

(5)删除元素

9378c66a45ee1576932229a44fa8d387.png

(6)归并两个单链表

0120082828c4c09333d48e9200bae13b.png

6.循环链表、双向链表(P35)

循环链表(约瑟夫环)的建立及C语言实现:

循环链表(约瑟夫环)的建立及C语言实现​c.biancheng.net
d37e3fce072c3cc04743c3c4af68f33e.png

链表(单向、双向、单向循环、双向循环)学习过程总结:

链表(单向、双向、单向循环、双向循环)学习过程总结--有源代码、注释和示意图_菜鸟学C/C++-CSDN博客_单向循环链表​blog.csdn.net
36f5dc99a98c89ad4eb1cd604da2f8f7.png

第2章:栈和队列

栈和队列是两种重要的线性结构。从数据结构角度看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子集,它们是操作受限的线性表。因此,可以称为限定性的数据结构。

1.栈的定义

c45dad26ebb2586214fdece3bf6aef60.png

3afdc7ce20c866a58c0dfc6eda5b161f.png

2.顺序栈

618792db7e2e89e33d70eb64fd1473c3.png

0f61a8f2eed25dfa1d201a0be90586e9.png

0340baf0699d948c3851f4e8f877ecdb.png
第5行代码:realloc(S.base,sizeof().........)。6.Pop:出栈

3.链式栈:

7566aaab2b7500919fda3ca3a5b8ef54.png

8b272516074dd8b78e9ca7c222fbf242.png

4.链式队列

FIFO:先进先出。允许插入的是队尾(rear),允许删除的是队头(front)。

有头结点,链式队列的判空条件是:头指针、尾指针均指向头结点。

fa1d2fcc9cd37e94926dbb04b6a4defa.png

ba1b1a8d662f877a998da3720bf2ba5d.png

63414a0e28ded844c08ae444a44b0588.png

1ed45fa8b707f66735566a8805c87078.png

ff5b1f45e334467d7f8891d1c5174ba2.png

5.循环队列-队列的顺序表示和实现

在C语言种不能用动态分配的以为数组来实现循环队列

a2939d99fd1d78a1d8bd0c0e6e89297c.png

c9c6caf9371dfd04bfd2e904ba5dd814.png

21dcc727c3d3298ddfe2bf5c3da31c36.png

9b4b928b4cf695815bed7cf1b4aa6639.png

b2ec186e23841a380a5e5b072f895106.png

第4章:串

9975f59a06f3cdddfe99b7377292de8f.png

34c3a2ace6d312ef9f74ff93e71f12c4.png

d35c145d4647cc8a3dae815b324f44d5.png

定长顺序表示:

https://www.cnblogs.com/cpoint/p/3479557.html​www.cnblogs.com

1.堆分配存储表示(动态分配内存)P75

14a05608d9e0e61a8f2dc1646ebeea6c.png

112e6382ba2bbc3c0dc0aa8588fd0ad0.png

e03b9bb957cf795c179111abf3e5957b.png

6d144c5c01006d9c475de8cbc6ea4841.png

***模式匹配Brute-Force算法(BF算法)

比较次数:(n-m+1)*m (轮数*每轮比较次数)

时间复杂度:O(n*m)

7b20351ebb9b108326015a3bed7f8f3e.png
(原创)详解KMP算法 - 孤~影 - 博客园​www.cnblogs.com
8388b4e42dcb0e290ebb2a4e22ce87fc.png

5e50062902c8ce1196aa9ba23605c92c.png

第5章:数组和广义表

1.数组的定义

(1)和线性表一样,所有的数据元素都必须是同一种数据类型。

(2)数组一旦被定义,他的维数和维界就不再改变。因此,除了结构的初始化和销毁之外,数组就只有存取元素修改元素值的操作。是顺序存储结构、随机存储结构(存取数组中任意元素的时间相等)。

(3)二维数组是非线性结构。(有两个直接前驱和直接后继)

(4)二维数组也是顺序存储结构。(一片连续的一维数组存储空间)。

二维数组有两种存储方式:行优先顺序存储(低下标优先)、列优先顺序存储(高下标优先)。

2.矩阵的压缩存储

(1)矩阵都是非线性存储结构。

(2)压缩存储是指:对多个值相同的元分配一个存储空间;对零元不分配空间。

(3)假如相同的元或者零元素在矩阵中的分布有一定规律,则我们称此类矩阵为特殊矩阵;反之为稀疏矩阵(矩阵阶数很大,非零元个数<零元个数,且分布没有规律)。

*****特殊矩阵*****

对称矩阵、下(上)三角矩阵、对角矩阵

5c54c34f4949415a47f43a89684b955c.png

d2ab22df7d25f10431d14a97eff47033.png

6d9e145fbcf33e58e0737e563b1d9ddd.png

*****稀疏矩阵*****创建、打印、转置矩阵

两个稀疏矩阵相乘的乘积不一定是稀疏矩阵。

2fe05a0edb7615a2939b59f3bf650eee.png

9aa334faacdc21ae6d2f6c1ec175aa8e.png

b3c3b2f70a5c22c1ab3a9739cf7f2931.png

4ccdda799174922992ffcf44791199a6.png

3b94f39322690a132cee3d70ef4d5f34.png

*****十字链表创建、打印稀疏矩阵*****

678d5ba2f7516fe27ecb856c87ddf0a4.png

4f7159afcabfcfdbeb5fb4b8b51b0708.png

b0e7deb5d518c4b32123803ff62adcb6.png

e9fa0ba2401e5106d96305bd817738b4.png

3.广义表

9afd938950aaf5fcf1430d1c4e3ef587.png

第6章:树和二叉树

(1)树结构的定义是一个递归的定义。

(2)树型结构是一类最重要的非线性数据结构。(遗传图谱等)

(3)树、森林、二叉树是3中不同的结构,谁都不是谁的特殊。

(4)树型结构中元素之间存在一对多的关系(多个分支)。

9ce650e0a17cbc84c30d6f130895a7ee.png

6a918af582409ee63ccfc23af6cef9f9.png

fce33089554f92bcfaa878bf8b20e644.png

森林(Forest)是m(m≥0)棵互不相交的树的集合。对树中每个结点而言,其子树的集合即为森林。由此,也可以森林和树相互递归的定义来描述树。

1.二叉树(重点)

二叉树(Binary Tree)是另一种树型结构,它的特点是每个结点至多只有两颗子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序是不能任意颠倒。

二叉树是有序树。

9d9d76555edabe095a03908dad60739c.png

二叉树的性质:

(1)在二叉树的第i层上至多有2^(i-1)个结点(i≥1)。

(2)深度为k的二叉树至多有2^k - 1个结点(k≥1)。

(3)对于任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,v则n0=n2+1。

满二叉树和完全二叉树:

49793e53ae38873fef2243c0340da65f.png

87758104227270ef1dea8de84125774a.png

完全二叉树的性质:

9f4fc1cf41227c8ca67c945ae8a2cebf.png

补充:

(2)……是结点2i。

(3)如果2i+1>n,则结点i无右孩子;否则其右孩子RCHILD(i)是结点2i+1。

2.二叉树的存储结构

顺序存储结构:

cdae3080f2afec7f6e649560aa4ef6a3.png

链式存储结构:

a1c5556753445987caf9f978cdd2e71b.png

ab6b0145419178589c07b7047edee558.png

3.遍历二叉树何线索二叉树

173ca62c92e27ae2562b6a85ed529521.png
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值