![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构和算法
数据结构和算法的简单理论描述和具体代码实现,主要使用C和Python
夕阳惜夏
这个作者很懒,什么都没留下…
展开
-
剑指offer:青蛙跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。思路:可以使用动态规划的思想来处理class Solution: def numWays(self, n: int) -> int: mod = 1e9+7 if n == 0: return 1 if n..原创 2022-03-25 15:37:14 · 328 阅读 · 0 评论 -
剑指offer:斐波那契数列
题目:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1)= 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。思路:可以使用动态规划的思路来解决问题class Soluti...原创 2022-03-25 15:24:15 · 371 阅读 · 0 评论 -
剑指offer:从头打印链表
题目:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)思路:链表的遍历只能从到尾,可以借用栈的入栈和出栈将访问得到的值顺序翻转import numpy as npclass Stack: def __init__(self): self.s = np.array([], dtype=int) self.length = 0 def append(self, e): self.s = np.appe..原创 2022-03-25 15:03:37 · 359 阅读 · 0 评论 -
剑指offer:包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。思路:增加一个数据域用来记录最小元素,如果当前入栈元素不大于最近一次保存的最小值,那么将当前值保存为最近一次保存的最小值import numpy as npclass MinStack: def __init__(self): """ initialize your data struc..原创 2022-03-24 18:05:14 · 423 阅读 · 0 评论 -
剑指offer: 两个栈实现一个队列
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )思路:根据栈的后进先出原则,所有元素正序入栈后出栈顺序为反序,然后反序进入另一个栈后出栈顺序是正序import numpy as npclass Stack: def __init__(self): self.s = np.arra..原创 2022-03-24 17:56:57 · 891 阅读 · 0 评论 -
直接插入排序(Python)
顾名思义,直接插入排序是一种插入排序。排序过程中不需要借助硬盘来保存临时数据,所以它也是一种内部排序。直接插入排序的思想是将一个序列在逻辑上分为两部分组成,一半是已经排序好的,一半是没经过排序的,要做的是将数据从没排序的部分拿出来,然后在排序好的部分里找个合适的位置插入。算法的空间复杂度是:O(1)算法的时间复杂度是:O(n^2)# 直接插入排序import numpy as npdef insert_sort(data: list): init = np.array([0原创 2021-12-31 17:15:05 · 998 阅读 · 0 评论 -
图的十字链表实现(Python)
当实现稀疏图时,为了避免空间浪费会采用邻接表实现。但是邻接表实现的图,查找某个顶点的入度边关联的另一个顶点时就比较麻烦,就是就可以采用图的十字链表实现十字链表的关键点是,两个有相同弧头顶点的弧结点就有一个指针相连,两个有相同弧尾顶点的胡结点也会有一个指针相连"""图的十字链表表示"""import numpy as npclass ArcBox: # 弧结点 def __init__(self, tail_vex, head_vex, head_link=None,原创 2021-12-28 14:46:40 · 901 阅读 · 0 评论 -
图的邻接表实现(Python)
在实现稀疏图的时候,邻接矩阵会使用大量空间用来表示两个顶点没有邻接关系,但是实际使用时我们更关注有邻接关系的顶点,所以为了避免这个问题,可以使用邻接表来实现图,也就是使用链表来表示顶点间的连接关系"""图的邻接表实现"""import numpy as npclass ArcNode: """ 弧结点 """ def __init__(self, adj_vex, next_arc, info): self.adj_vex = adj_vex原创 2021-12-27 10:43:54 · 1987 阅读 · 0 评论 -
顺序表
优点存储密度大:节点本身所占存储量 / 节点结构所占存储量可以随机存储表中任一元素缺点在插入、删除某一元素时,需要移动大量元素浪费存储空间属于静态存储形式,数据元素的个数不能自由扩充...原创 2021-01-23 17:18:55 · 296 阅读 · 0 评论 -
栈的理解及实现
从数据结构角度看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表的子集,它们是受限的线性表,因此可称为限定性的数据结构。从数据类型角度看,他们是和线性表大不同的两类重要的抽象数据类型定义:栈:限定仅在表尾进行插入或删除操作的线性表。 栈顶:表尾 栈底:表头 空栈:空表栈的修改是按照后进先出的原则进行的,因此,栈又称为后进先出的线性表。栈的实现:#in...原创 2019-04-16 11:28:55 · 174 阅读 · 0 评论 -
顺序表
顺序线性表其存储结构是连续内存空间,所以查询操作(改、查)时间复杂度为O(1),数据操作(增、删)时间复杂度为O(n)#include <malloc.h>#include <stdlib.h>#include <stdio.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0...原创 2019-04-08 18:41:52 · 729 阅读 · 0 评论