![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
蓝色海洋oO
三人行,必有我师焉
展开
-
Map、Set、二叉搜索树及哈希冲突解决
Map和Set:作用------用来帮助用户进行搜索的容器 || 数据结构查找方式:1、顺序查找:----->O(N)2、二分查找:----->要求:序列必须是有序的----->O(logN)静态类型查找:查找的过程中,不会再改变数据的结构----->不会再插入和删除Map和Set:动态查找Map和Set:存储元素的类型:Map:1、Map是一个接口,没有继...原创 2020-06-13 16:41:32 · 356 阅读 · 0 评论 -
顺序表和链表(包括双向链表)代码总结
顺序表的实现:public class MyArrayList { public int usedSize; public int[] elem; public final int CAPACITY = 10; public MyArrayList() { this.usedSize = 0; this.elem = new i...原创 2019-11-09 13:11:09 · 199 阅读 · 0 评论 -
复制带随机指针的链表(深拷贝)
题目来源:LeetCode(力扣)给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。思路:分三步走,首先,将新老链表相互间隔的串为一个链表;然后,处理random指针域;最后,将老新链表拆开,并返回对应的链表头结点。/*// Definition for a Node.class Node { public ...原创 2019-11-06 20:38:09 · 533 阅读 · 0 评论 -
链表的回文结构
判断一个链表是否是回文结构,返回 true 或者 false思路是快慢指针和反转链表(后半部分),再进行比较题目来源:牛客网import java.util.*;/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val;...原创 2019-08-07 12:43:25 · 102 阅读 · 0 评论 -
相交链表
编写一个程序,找到两个单链表相交的起始节点。题目来源:LeetCode暴力求解法,代码写的比较挫public ListNode getIntersectionNode(ListNode headA, ListNode headB) { //计算两个链表的长度,并求差值 ListNode l1 = headA; ListNode l2 = he...原创 2019-08-07 14:02:55 · 81 阅读 · 0 评论 -
二叉树的基本概念及性质
二叉树的基本概念二叉树的五条性质:图文来源:学堂在线:《数据结构与算法设计》张小艳老师以上图文为在复习数据结构与算法时整理的笔记,侵删...原创 2019-08-14 13:00:25 · 276 阅读 · 0 评论 -
环形链表
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。题目来源:力扣思路:先用快慢指针法判断链表是否有环,求出快慢指针相遇点,再想办法求出入环点。 public ListNode detectCycle(ListNode head) { //思路:快慢指针法 ListNode slow = head; ListNod...原创 2019-08-07 18:51:58 · 94 阅读 · 0 评论 -
用数组简单实现栈(stack)的基本操作
import java.util.Arrays;//用数组实现栈public class Stack { private int[] array; private int top; public Stack(int defaultCapacity){ array = new int[defaultCapacity]; top = 0;...原创 2019-08-11 23:20:50 · 391 阅读 · 0 评论 -
三数之和
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/3sum给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。解题思路:对数组由小到大排序,然后固定一个数nums[ i ],再分别使用左...原创 2019-09-17 10:44:54 · 138 阅读 · 0 评论 -
合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。输入:1->2->4, 1->3->4输出:1->1->2->3->4->4题目来源:LeetCode public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode...原创 2019-08-06 17:32:10 · 84 阅读 · 0 评论 -
链表中倒数第k个结点
题目来源:牛客网(NowCoder)输入一个链表,输出该链表中倒数第k个结点。 public ListNode FindKthToTail(ListNode head,int k) { ListNode node = head; int len = 0; for (; head != null; head = head.next) { ...原创 2019-08-06 13:17:00 · 84 阅读 · 0 评论 -
将参数字符串中的字符反向排列(递归实现)
编写一个函数 reverse_string(char * string)(递归实现)实现:将参数字符串中的字符反向排列。要求:不能使用C函数库中的字符串操作函数。#include<stdio.h>#include<windows.h>void reverse_string(char *p){ int len = strlen(p); char tmp = *...原创 2019-04-10 21:23:03 · 178 阅读 · 0 评论 -
汉诺塔(Hanoi)问题递归算法
/*1 A==>C 12 A==>B A==>C B==>C 33 A==>C A==>B C==>B A==>C B==>A B==>C A==>C 7464 2^64-1*/#include<stdio...原创 2019-04-10 21:29:18 · 488 阅读 · 0 评论 -
(三子棋)C语言实现
整体构思:1、先让用户看到界面,构思用二维数组显示棋盘,这里先打印出菜单页面,让用户进行选择“游戏”或者“退出”,写一个函数实现打印菜单页面,这里可以定义一个函数ShowUI()函数打印菜单。2、菜单打印完毕之后,如何让用户进行选择,可以在main()函数中写一个判断语句判断用户的选择,例如选择1后开始玩游戏,选择0退出游戏,错误输入后提示用户输入正确的数字,并考虑玩完一局后可以选择继续玩游戏...原创 2019-04-08 19:23:55 · 299 阅读 · 0 评论 -
最快地求出一个数的二进制序列中有几个1
例如:数字10的二进制序列中有2个1。三种方法:#include<stdio.h>#include<windows.h>int Count_1_bits1(int x){ int count = 0; while (x) { //模2取余 if (x % 2 == 1) { count++; }...原创 2019-04-09 01:05:56 · 322 阅读 · 0 评论 -
移除链表元素
删除链表中等于给定值 val 的所有节点。实例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5class Solution { public ListNode removeElements(ListNode head, int val) { ListNod...原创 2019-07-26 22:06:24 · 71 阅读 · 0 评论 -
反转链表
反转一个单链表示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL思路:所谓的单链表反转,就是把每个结点的指针域由原来的指向下一个节点变为指向其前一个节点。但由于单链表没有指向前一个结点的指针域,因此我们需要增加一个指向前一个结点的结点prev,用于存储每一个结点的前一个结点。此外,...原创 2019-07-26 22:30:18 · 100 阅读 · 0 评论 -
删除链表中的节点,链表的中间结点
题目来源:LeetCode删除链表中的节点(使用替换思想)class Solution { public void deleteNode(ListNode node) { node.val = node.next.val; node.next = node.next.next; //思路:把下一个节点的值赋给当前节点,然后将当前节点指向下下...原创 2019-07-26 22:36:39 · 108 阅读 · 0 评论 -
链表分割
题目描述题目来源:牛客网编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。思路:定义两个新链表,分别存放比x小的元素以及大于等于x的元素,分情况讨论,最后将两个链表连接起来。第一次在牛客网写这个代码,还是出了不少问题的,最...原创 2019-07-26 23:31:56 · 111 阅读 · 0 评论 -
线性表的顺序存储和链式存储的优缺点及其比较和选择
顺序存储和链式存储各自的优缺点及其比较顺序存储:顺序存储的优点: 1、逻辑结构与物理结构是统一的,其中的元素都是顺序存储的; 2、方法简单,好理解,各种语言中都有数组,易实现; 3、不用为结点间的逻辑关系而增加额外的存储空间; 4、顺序表具有按元素序号随机访问的特点; 5、存储密度大,存储密度为1(存储密度是指一个结点中数据元素所占的存储单元和整个结点所占的存储单元之...原创 2018-09-16 12:39:50 · 42684 阅读 · 1 评论