数据结构学习笔记(一)——基本概念及线性结构

好久以前就想认真学习下数据结构了,一直。。。

经过多方面对比,我选择的课程是中国大学MOOC上的浙江大学《数据结构》课程,由陈越、何钦铭老师主讲。

❤ 2020.10.19 ❤

❤ 2021.9.27 ❤

基本概念

第一章是概述,里面介绍了c语言的一个clock()函数
在这里插入图片描述
给算法下了个定义
在这里插入图片描述
评判算法好坏的指标
在这里插入图片描述
不同时间复杂度的算法的效率
在这里插入图片描述
以及变化曲线
在这里插入图片描述
然后说:一个程序员在遇到时间复杂度为 n 2 n^{2} n2时,要考虑是不是可以把复杂度降到nlogn。
然后举了个例子:

最大子列和问题

在这里插入图片描述
然后介绍了四种方法:
1、暴力计算法,把所有情况都遍历一遍,求出最大值,时间复杂度 O ( n 3 ) O(n^{3}) O(n3)
2、优化的暴力计算法,减少一层循环,时间复杂度 O ( n 2 ) O(n^{2}) O(n2)
3、分而治之法,就是二分法,使用递归的方法,将每次判断的范围一分为二,时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)
4、在线处理,相当于每传入一个数据就进行处理,只需读取整个数组一遍,算法原则是:首先子列不断做累加运算,当子列和为负时就抛弃使其为0,子列和大于当前最大子列和时就替换,时间复杂度为 O ( n ) O(n) O(n)
最大连续子数列和

❤ 2021.9.27 ❤

线性结构

线性表

在这里插入图片描述

线性表的顺序存储

在这里插入图片描述
线性表的操作:(我就不贴了,可以去PPT里面找)
1、初始化
2、查找
3、插入
插入操作需要把插入位置后的元素全部往后挪,挪之前要判断线性表是不是满了。
4、删除
删除需要把删除位置之后的元素全部往前挪(好麻烦)。

线性表的链式存储

在这里插入图片描述
操作:
1、求表长:
遍历
2、查找:按序号查找,按值查找
遍历
3、插入
4、删除
修改指针之后要释放内存空间

广义表

在这里插入图片描述

多重链表

在这里插入图片描述
然后举了一个例子,是用十字链表表示系数矩阵
在这里插入图片描述
在这里插入图片描述
在这里左上角的term节点是整个矩阵的入口,里面记录了矩阵的长宽以及非零节点的数量。
head节点是每行每列的入口,为了让整个矩阵节点的形式统一,使用共用体来存储,用tag区分
在这里插入图片描述

堆栈

后缀表达式

首先介绍了一个叫后缀表达式的东西
在这里插入图片描述
使用栈来存储运算

在这里插入图片描述
注意:插入的时候要判断栈有没有满,删除的时候判断是否为空。

栈可以用一个一位数组来实现
在这里插入图片描述
也可以用链式存储来实现
在这里插入图片描述
需要建立一个栈头结点,删除节点之前要判断栈空不空,并记得释放内存。
然后举了个例子,应用栈的方法将中缀表达式转换成后缀表达式
在这里插入图片描述
在这里插入图片描述

队列

下面是队列,队列和堆栈的区别就是先入先出
在这里插入图片描述
在这里插入图片描述
队列也可以分别用顺序存储和链式存储两种方式实现
在这里插入图片描述
顺序存储可以以循环队列的方式存在
在这里插入图片描述
这样的队列判断是否存满时不能直接判断头指针和尾指针的相对位置,可以用
1、额外的标记,比如一个数值存储元素的个数,或者一个标记存储最后一次是存还是取
2、n个位置只存储n-1个元素。
在这里插入图片描述
使用链表实现队列,要注意front指针要在链表头,因为front是用来实现删除操作,rear是用来插入的。
最后讲了个例子,是用链表实现多项式运算,很有实际意义!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值