
数据结构学习
xiaoyan4869
这个作者很懒,什么都没留下…
展开
-
快慢指针找环入口
然后函数返回指向两指针相遇结点的指针,设头结点为a,环的入口为b,两指针相遇结点为c,则头结点到环入口距离为ab,入口到相遇结点距离bc,相遇结点到入口是cb,快慢指针相遇时快指针先移动ab进入环,再移动n*(bc+cb),n指的是快指针超过慢指针的圈数,然后再移动bc个距离追上慢指针,一共移动了ab+bc+(cb+bc)*n个结点,慢指针一共移动了ab+bc个结点,由于快指针速度是慢指针2倍,所以可以得出ab+bc+(cb+bc)*n=2*(ab+bc);化简得ab=(n-1)*(bc+cb)+cb;原创 2025-03-06 15:38:08 · 266 阅读 · 0 评论 -
基础排序算法
插入排序,就是将从首位元素起的每一个元素插入他在已排好序的序列的正确位置,通过遍历我们可以找到他应该存储在哪个位置,将比他大的元素后移后,把他填入该位置。原创 2024-12-27 21:45:58 · 149 阅读 · 0 评论 -
7-1 哈希函数1
分数 30设哈希表长为18,哈希函数为: H(k)=k MOD 17 建立对应的哈希表。采用开放地址法中的二次探测再散列解决冲突,完成以下工作:(1)查找值为x的元素地址(位置)。找不到则输出-1。(2)删除关键字为t1、t2的元素,再添加关键字为y的元素(3)输出整个哈希表(用%4d格式,没有数据则输出4个*)原创 2024-12-02 12:40:36 · 285 阅读 · 0 评论 -
最短工期算法
本题与上一题类似,均是通过拓扑排序作为解题的关键步骤,该题唯一的不同就是需要计算权值来求得每个结点的最早发生时间。点击这个链接可以快速查看拓扑排序的算法一个项目由若干个任务组成,任务之间有先后依赖顺序。项目经理需要设置一系列里程碑,在每个里程碑节点处检查任务的完成情况,并启动后续的任务。现给定一个项目中各个任务之间的关系,请你计算出这个项目的最早完工时间。原创 2024-11-28 10:01:51 · 782 阅读 · 0 评论 -
拓扑排序算法
拓扑排序完整程序原创 2024-11-28 09:48:33 · 312 阅读 · 0 评论 -
队列以及循环队列及其基本操作
队列也分为链队列以及顺序队列两种,链队列动态分配空间,不用担心空间不足,顺序队列简单易懂,操作方便,但是空间利用率低,所以我们一般使用链式队列结构。循环队列用类似线性表存储,需要预先分配循环队列存储空间,值得注意的点时循环队列由于队列可能存储在超出队列长度的位置,所以在Q.rear+1时需要对maxsize取模,得到实际的存储位置。循环队列与普通队列的区别在于循环队列首尾相接,其首尾相接的特性可以使得他大大减少了空间的浪费,队列存储到末端时,由于其首尾相接的特性,可以在队首前面未存储数据的空间存储。原创 2024-10-22 19:57:38 · 346 阅读 · 0 评论 -
栈的基本操作
栈可以理解为一叠上下叠放好的盘子,想将新盘子放入这叠盘子中,必须放在最上面,想要拿盘子也要从最上面拿,遵循FILO原则first in last out 先进后出。链栈由于较少应用所以这里不进行代码的书写,链栈与线性栈的区别就在于数据的连接方式,线性栈类似于线性表,链栈则为链式存储,由于栈并不存在从数据中间插入删除的问题,所以基本用不到链式存储。原创 2024-09-26 20:15:58 · 316 阅读 · 0 评论 -
C语言线性链表基本操作
线性链表与顺序表的区别在于存储的结构不同,顺序表是物理位置相邻,逻辑也相邻,而链表物理位置不一定相邻但是逻辑相邻,这导致他查找,存取数据时需要一一遍历以找到所需要存取的位置,因为链表的相邻,相当于我不知道你具体在哪里,我只能看到前面和后面的人,若要找到某个人,就得一个一个问过去。基于链表的基本知识,我们可以创建这样一个链表。以下是头插法创建单链表的代码注意头插法输入数据需要倒序。原创 2024-09-12 13:39:33 · 922 阅读 · 0 评论 -
c语言顺序链表基础操作
/存储空间基址int length;//线性表当前长度//线性表当前存储容量(以sizeof(ElemType)为单位)}SqList;初始化int LocateElem(SqList &L,ElemType e,Status(*compare(ElemType,ElemType))//传的是指针函数,具体应用详情请移步其他文章i=1;p=L.elem;while(i原创 2024-09-09 18:28:45 · 834 阅读 · 2 评论