![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
琥珀川的学习笔记,欢迎讨论,如有错误请私信
睡懒觉的ii琥珀川
这个作者很懒,什么都没留下…
展开
-
数据结构7-用栈实现队列/用队列实现栈
使用栈实现队列,最主要的问题是,出队时要弹出栈底的数据1,使用双栈来解决这个问题,st_push里面压入了12345,要弹出1 ,先把st_push的数据压入 st_pop, 由于栈 后进先出的性质,全部压入之后,就变成了54321,此时1就是st_pop的栈顶数据。要实现“出栈”也就是要弹出队尾的1,可以把队列q1的元素压入q2,之留下最后一个元素1,可以用while( q1.size()>1)控制,循环结束之后就只剩下最后一个元素1了,这样q1就能弹出/返回队列中的最后一个元素了。原创 2024-02-27 20:44:00 · 325 阅读 · 0 评论 -
栈-有效括号的判断
利用栈后进先出的作用,有效括号必须满足闭合,并且是按正确顺序的闭合,可以把左括号和右括号分成两边进行配对,([{ }]) ,使用迭代器对string s进行遍历, 遇到左括号就入栈, 遇到右括号时,使用&&判断 当前右括号和栈顶的*it 是否配对。原创 2024-02-26 20:39:42 · 407 阅读 · 0 评论 -
数据结构5-复杂链表的复制 解题思路
如果只是深拷贝简单链表,那只需要开辟新的结点,遍历原来的链表就可以复制出一条新的copy链表,但复杂链表涉及到了random指针的复制问题,显然,给copy链表添加random指针的指向时,不能通过简单的对值的搜寻确定 随机指针的指向,如果原链表当中有多个相同值的结点,那简单的值搜索根本不能确定和原链表同样的的指向。或者使用next指针保存后一个结点的位置,这样不会丢失后一个节点的位置信息,然后迭代,cur=next,在下一个循环中继续添加复制节点并链接到链表中。3.把copy结点拆出来形成新的链表,原创 2024-02-23 21:39:46 · 352 阅读 · 0 评论 -
数据结构4-环形链表求入环第一个节点的讨论与公式证明
接下来表示重合时快指针的路程,由于快指针先进入环,此时慢指针还没进入,那么当慢指针到达环的第一个节点时,快指针有可能已经在环内走了好几圈了,这里假设快指针在环内循环的路程是NC,那么重合时,快指针的所走的路程是S=L+NC+X;当慢指针进入环之后,由于快指针的速度是慢指针的2倍,也就是说,慢指针走一圈,快指针就走两圈,这其中他们两个一定会相遇,所以慢指针进入环后,一定是走不完一圈的时候就会和快指针重合,那么重合时慢指针的路程S=L+X。第二种方式 代码比较简单,但需要公式证明。原创 2024-02-21 21:25:50 · 404 阅读 · 0 评论 -
数据结构3-环形链表快指针步数讨论
如果快指针一次走3步,则循环一次之后他们之间的距离为X-2,X-4,x-6...如果X为奇数,就会导致错过,如果错过之后再算距离还是奇数,那么就会导致下一次还是错过,如果错过之后再算距离是偶数,那么就会追上,极端情况下如果X一直是奇数,就会造成快指针无法追上慢指针,也就无法判断是否为环形指针。当慢指针进入环之后,快指针开始追赶,假设此时相差X步,快指针一次走2步,慢指针一次走1步,则每循环一次,快慢指针之间的距离减少1步=X-1,一直循环之后X=0时,快指针追上慢指针。一次走N步也是类似的道理。原创 2024-02-21 16:11:09 · 391 阅读 · 0 评论 -
数据结构2-链表
数组在逻辑和物理上都是连续的 链表在逻辑上是连续的,物理上不连续。顺序表:使用数组存储数据 本质上就是数组。注意 凡是插入都存在越界问题。2、逻辑结构(是我们想象出来的)1、物理结构(内存中如何存)物理结构:数组、链表。原创 2024-01-17 16:00:35 · 307 阅读 · 1 评论 -
数据结构笔记 1--时间复杂度空间复杂度
时间复杂度和空间复杂度原创 2023-11-02 21:47:54 · 39 阅读 · 0 评论