数据结构
__Unique__
这个作者很懒,什么都没留下…
展开
-
链表基本操作及部分面试题
链表基本操作及面试题链表基本操作链表的定义创建一个新的节点链表初始化链表基本操作链表的定义typedef int DataType;typedef struct SListNode{ DataType data; //当前节点中保存的元素 struct SListNode* next;//指向链表中的下一个节点}SListNode;创建一个新的节点SListN...原创 2018-10-21 20:42:14 · 325 阅读 · 0 评论 -
java实现---在无头单链表的一个节点前插入一个节点(不能遍历链表)
这个题目也是要求不能遍历链表 所以我们可以采用伪插入 先new一个新的节点node,而node.data赋值为pos位置的值; 插在pos的后面 此时pos指向node,node指向pos的next 最后要插入的数放在pos.dataclass ListNode{ int data; ListNode next;}public class Link { ...原创 2018-11-27 10:27:52 · 592 阅读 · 0 评论 -
java实现---删除一个无头单链表的非尾节点(不能遍历链表)
可以利用伪删除法把pos.next的值覆给pospos的next指向pos.next的next删除pos.nextclass ListNode{ int data; ListNode next;}public class Link{ public static void DeleteListNotTail(ListNode pos) { ...原创 2018-11-26 21:38:22 · 310 阅读 · 0 评论 -
java实现---逆置反转单链表
链表的逆置和上一篇博客中的从尾到头打印链表是完全不同的; 逆置链表要改变链表的方向,next指针是要变化的 如下代码中是头删和头插的思想,不是真正的删除节点; 而是用头删的思想把第一个节点拿下来,再逐一头插成一个新的链表class ListNode{ int data; ListNode next;}public class Link{ public s...原创 2018-11-26 21:02:13 · 767 阅读 · 0 评论 -
Java实现---从尾到头打印单链表
用Java写链表感觉要比C语言简单一些,封装节点,定义节点变量都比较方便 可以把链表的节点封装为一个类,可以直接new出来一个节点对象 方法可以直接写在主类里,但是一定要写为staticclass ListNode{ int data; ListNode next;}public class Link { public static void PrintF...原创 2018-11-26 20:07:45 · 379 阅读 · 0 评论 -
java实现---判断单链表是否带环?若带环,求环的长度?求环的入口点?
判断单链表是否带环若带环,求环的长度求环的入口点单链表是否带环 判断一个链表是否带环 我们可以定义两个快慢节点,快的一次走两步,慢的一次走一步 若链表带环,两个节点在遍历的过程中,肯定会在环内相遇 如果不带环,则fast会走到空,则循环退出 public static ListNode HacListCircle(ListNode first){ ListNode...原创 2018-12-01 19:48:56 · 545 阅读 · 0 评论 -
java实现---选择排序---堆排序
选择排序和堆排序选择排序堆排序选择排序 选择排序就是在一个元素集合中选择一个最大的数据元素如果它不是最后一个元素,则将它与这组元素的最后一个交换;接着在剩余的集合元素中重复步骤,直到集合剩余1个元素public static void SelectSort(int arr[]){ int i,j; for(i = arr.length;i &gt...原创 2018-12-08 20:16:19 · 256 阅读 · 0 评论 -
交换排序---冒泡排序----快速排序
交换排序冒泡排序快速排序冒泡排序 比较相邻的元素。 如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。 在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。void BubbleSort(int arr[], int size)...原创 2018-12-08 21:25:36 · 194 阅读 · 0 评论 -
归并排序
将待排序的元素序列分成两个长度相等的子序列,对每一个子序列排序,然后将他们合并成一个序列。合并两个子序列的过程称为二路归并 。 直到,第一种:区间已经有序 size == 1第二种: 区间内没有数 size<=0int Merge(int arr[], int left, int mid, int right,int extra[]){ int left_i ...原创 2018-12-08 21:27:54 · 136 阅读 · 0 评论 -
java实现---单链表实现约瑟夫环
实现约瑟夫环共3步 1.首先将单链表构成环 2.根据约瑟夫环规则,删除节点 让循环继续,直到环中只剩下最后一个节点class ListNode{ int data; ListNode next;}public class Link{ public static ListNode JosephCycle(ListNode first,int k){...原创 2018-11-27 11:25:37 · 2160 阅读 · 0 评论 -
java实现---合并两个有序链表,合并后依然有序
cur1 和cur2 分别是两条有序链表,result 则为合并之后的结果链表,tail为结果链表的最后一个节点,方便尾插 cur1 和 cur2 同时往后走,两个指针所指的数分别比较,拿出来的节点尾插在result链表中class ListNode{ int data; ListNode next;}public class Link{ public s...原创 2018-11-27 15:30:49 · 3655 阅读 · 1 评论 -
前/中/后遍历二叉树(递归&非递归)
遍历顺序不同其实就是根节点所在的位置不同1.前序遍历:根节点---&amp;gt;根节点的左子树---&amp;gt;根节点的右子树2.中序遍历:根节点的左子树---&amp;gt;根节点---&amp;gt;根节点的右子树3.后序遍历:根节点的左子树---&amp;gt;根节点的右子树---&amp;gt;根节点递归----------//原创 2018-08-28 16:05:58 · 134 阅读 · 0 评论 -
链表面试题----约瑟夫环相关
约瑟夫环相关链表面试题继上篇博客之------------什么是约瑟夫环约瑟夫环继上篇博客之------------什么是约瑟夫环约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。选定一个人作为开始,报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。约瑟夫环SLi...原创 2018-10-24 15:56:47 · 694 阅读 · 0 评论 -
复杂链表的复制。一个链表的每个节点,有一个指向next指针向下一个节点,还有一个random指针指向这个链表中一个随机节点或者NULL,现在要求复制这个链表,返回复制后的新链表
复杂链表的复制。一个链表的每个节点,有一个指向next指针向下一个节点,还有一个random指针指向这个链表中一个随机节点或者NULL,现在要求复制这个链表,返回复制后的新链表 这个题目不仅仅是简单的复制一个链表,它的难点在于一个节点里面除了data和next指针还多了一个random指针,无法复制 如下图:蓝色虚线则表示random指针 首先,如下代码定义复杂链表struct Co...原创 2018-11-25 20:22:42 · 597 阅读 · 0 评论 -
java实现---插入排序----直接插入排序和希尔排序
插入排序直接插入排序希尔排序直接插入排序 直接插入排序,把待排序的元素插入到前面排好序的一组元素的合适位置上去 在前面已经排好序的元素中,从后往前找public class Sort { public static void InsertSort(int arr[]){ int i,j,key; for(i = 1;i < arr.len...原创 2018-12-04 11:32:15 · 210 阅读 · 1 评论 -
java实现---判断两个链表是否相交,若相交,求交点(假设链表不带环)
有两个单链表,判断它们是否相交,若相交,求交点第一步判断两个链表是否相交第二步求交点第一步判断两个链表是否相交 如果两个链表相交,那么它们的最后一个节点肯定是同一个节点,如下图展示 我们可以分别遍历两个链表,直到最后一个节点 当最后两个是同一个节点时,则说明相交 public static boolean DeleteTailK(ListNode first,ListN...原创 2018-12-01 18:32:18 · 1315 阅读 · 0 评论 -
java实现---查找单链表的倒数第K个节点,要求只能遍历一次链表;;;删除链表的倒数第k个节点
定义两个前后节点forward和backward 先让forward走 k 步,再让forward和backward一起走,当k为0之后,forward则走到了空,此时backward就走到了倒数第k步class ListNode{ int data; ListNode next;}public class Link{ public static void F...原创 2018-12-01 15:14:19 · 1276 阅读 · 2 评论 -
java实现---查找单链表的中间节点,要求只能遍历一次链表
定义两个节点,一个快,一个慢 快的一次走两步;慢的一次走一步 当快的走到链表的最后时,慢的刚好走到一半,即链表的中间节点class ListNode{ int data; ListNode next;}public class Link{ public static void FindMid(ListNode first){ ListNode...原创 2018-12-01 14:41:34 · 2520 阅读 · 3 评论 -
java实现---1.求两个已排序单链表中相同的数据 2. 求两个已排序单链表中重复出现的相同的数据
1.求两个已排序单链表中相同的数据 两个单链表的两个节点同时往后走 走一次比较一次,当不相等时,让数字大小“小”的那一个先走一步 若相等,则输出 接着继续遍历class ListNode{ int data; ListNode next;}public class Link{ public static void PrintIntersection(Lis...原创 2018-11-28 15:44:22 · 537 阅读 · 0 评论 -
快速排序思想及Java实现
快排的基本思想:首先先从一组数中找到一个基准值其次,进行第一次分区:把数组中,比基准值小的数放在基准值的左边,比基准值大的数放在基准值的右边第一次遍历完数组之后,接下来,对基准值左右的两个区间继续分区;直到各区间最后只有一个数首先从后往前找,找到一个比基准值小的数之后,停下来,与基准值交换然后又从前往后找,找到一个比基准值大的值,停下来,接着与基准值交换直到,所有的数遍历完毕...原创 2019-03-09 14:40:41 · 483 阅读 · 0 评论