寒假每日总结

本文介绍了链表的数据结构特点和操作,包括如何使用next指针遍历和插入数据,同时对比了广度优先搜索(BFS)与深度优先搜索(DFS)的不同方法。此外,还详细讲解了01背包问题的算法核心,利用二维数组和动态规划求解背包内最大价值。
摘要由CSDN通过智能技术生成

链表

链表相比数组而言,不会受到类似数组大小的限制,但是链表访问数据只能将链表整体遍历。

首先需要利用结构体定义一个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物品质量)容量的最大价值   的 最大值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值