链表
链表相比数组而言,不会受到类似数组大小的限制,但是链表访问数据只能将链表整体遍历。
首先需要利用结构体定义一个data数据和next指针
( typedef用来对结构体重命名 )
接着定义结构体head,tail头尾指针以及p内部指针。
接着传入n个数据,就像是火车车厢通过链条连接一样,这些数据通过next指针前后依次指向下一个相邻数据的地址,p指针通过循环不断更新数据。
最后利用p指针,首先将p指针==头指针head的next指针,接着利用每个数据的next!=NULL进行循环输出。
广度优先搜索(BFS)
和深搜不一样的是,广搜是利用结构体队列记录走过的地方(和步数),并且广搜可以理解为一次走多步,而深搜只能一次一步。
01背包
题目背景:
01背包是指将n个任意重量且任意价值的物体放入一个任意最大容量的背包中,求出这个背包内的最大价值(每个物体不能重复放入)。
算法核心:
基本算法是开一个二维数组,利用结构体 q [ n ]记录下每个物体的weight和value。再利用核心代码来初始化二维数组中的值。所有初始化完成后数组的右下角便是价值最大的数值。
利用双重for循环,i指代第i个物体,j指当前背包最大容量限度。
先用if判断当前背包 j 容量能否装下物品 i ,不能装下则在当前位置直接赋值上个最大价值元素。
能装下则在当前位置取:1到i-1个物品在j容量时的最大价值 和 1到i-1个物品在(j - i物品质量)容量的最大价值 的 最大值。