刷题前记

准备刷题了,虽然还不知道怎么刷,先把一些数据结构前期知识记录一下,同时也是让自己脑子和手都不闲着。下面记录主要参考知乎一篇文章。

首先是一个总的概念,算法+数据结构=程序;有时面试问题会明确提到数据结构,比如“给定一个二叉树”;有时则比较含蓄,比如,“我想追踪美味作者相关的数据数量”。

数据结构是一个容器,以某种特定的布局存储数据。由于数据结构用来以有组织的形式存储数据,而且数据是计算机科学中最红要的实体,因此数据结构价值巨大。常见的数据结构包括:数组,堆栈,队列,链表,树,图,字典树,哈希表。

 

数组是一种最简单和最广泛使用的数据结构,其他数据结构比如堆栈和队列都源自数组,如上图所 是为大小为4的简单数组,包含几个元素1,2,3,4,每个数据元素分配一个正的数值,叫做“索引”,它对应该元素在数组中的位置。大部分语言都将初始索引定位0;数组主要包括两种:一位数组和多维数组(数组的数组);基本操作包括:insert-在给定索引位置插入一个元素,get-返回给定索引位置的元素,delete-删除给定索引位置的元素,size-获取数组内所有元素的总数。常见的数组面试问题:1找到数组中第二小的元素;2找到数组中第一个没有重复的整数;3合并两个分类数组;4.重新排列数组中的正值与负值。

堆栈实现的是很有名的撤销选项,按照最后的状态排列在先的preview顺序将工作的先前状态存储在内存中,满足LIFO(后进后出),如上图所示为一个堆栈,包含三个元素,其中3位于顶部,首先就把它删除。堆栈的基本操作:push-在顶部插入元素,pop-从堆栈中删除后返回顶部元素,isempty-如果栈为空,则返回为true,top-返回顶部元素,但不从堆栈中删除。常见的堆栈问题:1使用堆栈计算后缀表达式,2对堆栈中的值进行排序3检查表达式中的括号是否平衡。

队列是另一种FIFO(先入先出)方法,队列完美例preview子:一列人在售票亭等候,如果有信任来,他们是从末尾加入序列,站在前面的人将先买到票然后离开队列。如上图所示。队列基本操作:enqueue()-向队列末尾插入元素;dequeue()-从队列头部移除元素;isempty()-如果队列为空,则返回true;top-返回队列的第一个元素。常见队列问题:1使用队列来实现堆栈2.颠倒队列中前k个元素的顺序3.使用队列生成从1到n的二进制数。

链表是另一个重要的线性数据结构,和数组在内存分配,内部结构,以及如何执行插入和删除的基本操作方面有所不同。链表就像一个节点链,其中每个节点包含数据和指向链中后续节点的指针等信息。有一个头指针,直线链表的第一个元素,如果链表为空,那么它只指向null或不指向任何内容,链表用于实现   preview  文件系统,哈希表和邻接表。链表主要分为单链表和双链表,链表的基本操作包括insertatend-在链表末尾插入指定元素,insertathead-在链表头部插入指定元素,delete-从链表中删除指定元素,deleteathead-删除链表的第一个元素search-返回链表中的指定元素,isempty-如果链表为空,返回true。常见的链表面试问题:1.翻转列表2,检测链表中的循环3,返回链表中导数第n个节点4,移除链表中的重复值。

就是一组节点,以网络的形式互相连接。节点也被成为定点,一对(x,y)就叫做一个边,表示定点x和定点y项链。一个边可能包含权重,显示从定点x到y所需成本。图的类型包括有向图和无向图。

preview图可以表示为两种形式邻接矩阵和邻接列表,常见的图遍历算法有广度优先搜索和深度优先搜索,常见的图面试问题:1.实现广度优先搜索和深度优先搜索2.检查一个图是否为树,3计算一张图中边的数量,4.找到两个顶点之间的最短路径。preview是一种层级数据结构,包含了连接它们的顶点和变。树和图相似,但树中没有循环。树广泛应用在人工智能和复杂的算法中,为解决各种问题。preview上图为简单的树的结构,下面是几种类型的树,N叉树,平衡树,二叉树,二叉搜索树,平衡二叉树,红黑树,2-3树,其中二叉树和二叉搜索树是罪常用的树。常见的树面试问题:1,找到一个二叉树的高度,2,找到一个二叉搜索树中第k个最大值,3,找到距离根据“k”个距离的节点,找到一个二叉树中给定节点的祖先。

字典树在解决字符串相关问题中非常高效,常用于搜索字典中的单词,为搜索引擎提供自动搜索建议。下午展示“top”,“thus”,“their”preview常见问题:1.计算字典树中的总字数,2.打印存储在字典树中的所有单词,3.使用字典树对数组的元素进行排序4,使用字典树从字典中形成单词4.构建一个T9字典。

哈希表数据结构性能取决于以下三个元素:哈希函数,哈希表的大小,碰撞处理方法。常见哈希问题:1.找到数组中的对称对2.追踪遍历的完整路径3.查看一个数组是否为另一个数组的子集4.检查给定数组是否不相交。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值