链表

DS博客作业01——线性表

随声附和 提交于 2020-03-08 22:02:45
0.PTA得分截图 1.本周学习总结 1.1 总结线性表内容 顺序表结构体定义 typedef int ElemType; typedef struct { ElemType data[MaxSize]; //存放顺序表元素 int length ; //存放顺序表的长度 } List; typedef List *SqList; 顺序表插入 void InsertSq(SqList& L, int x) { int i; for (i = L->length; i > 0; i--) { if (L->data[i - 1] > x) L->data[i] = L->data[i - 1]; else { L->data[i] = x; break; } } if (i == 0) { L->data[0] = x; } L->length++; } 在知道顺序表长度的条件下,从后往前重构顺序表,直至插入位置。 顺序表删除 void DelSameNode(List& L) { int i, j=0,k=0; static int h[100]; for (i = 0; i < L->length; i++) { if (h[L->data[i]] == 0) { h[L->data[i]]++; L->data[j++] = L->data[i]; } else { k++;

链表

元气小坏坏 提交于 2020-03-08 21:38:39
一.常见的缓存淘汰策略: 1.先进先出策略FIFO 2.最少使用策略LFU 3.最近最少使用策略LRU 二.链表 (一)链表的定义:链表是物理存储单元上 非连续 的、 非顺序 的存储结构,它由一个个结点,通过指针联系起来的,每个结点包括数据和指针。 (二)链表结构: 1.单链表 通过“指针”将一组零散的内存块串联起来使用。内存块称为结点;记录下个结点地址的指针称为后继指针next;第一个结点为头结点,用来记录链表的基地址;最后一个结点为尾结点,指针指向NULL。 链表的插入、删除操作,只需考虑相邻结点的指针变化,不需要数据搬移,时间复杂度为 O(1) 。 随机访问的时间复杂度为O(n) 。 2.循环链表 是一种特殊的单链表。尾结点的指针指向链表的头结点。 从链尾到链头比较方便。当要处理的数据具有环形结构特点时,适合采用循环链表。例如约瑟夫问题。 3.双向链表 每个结点有两个指针,分别为后继指针next和前驱指针prev。找到前驱结点的时间复杂度为O(1)。 4.双向循环链表 三. 1.删除操作 (1)删除结点中“值等于某个给定值”的结点 从头结点开始一个一个遍历,直到找到值等于给定值的结点,再删除。删除操作时间复杂度为O(1),查找操作时间复杂度为O(n);总时间复杂度为O(n)。 (2)删除给定指针指向的结点 对于单链表来说,要从头结点开始遍历找到给定结点的前驱结点,再删除

Leetcode:114. 二叉树展开为链表

橙三吉。 提交于 2020-03-08 21:17:00
题目: 给定一个二叉树,原地将它展开为链表。 例如,给定二叉树 1 / \ 2 5 / \ \ 3 4 6 将其展开为: 1 \ 2 \ 3 \ 4 \ 5 \ 6 AC代码 void flatten(struct TreeNode* root){ if(root != NULL){ struct TreeNode* res = (struct TreeNode*)malloc(sizeof(struct TreeNode)); res->val = -1; struct TreeNode* p1 = res; struct TreeNode* stack[10010]; int index = -1; stack[++index] = root; while(index >= 0){ struct TreeNode* temp = (struct TreeNode*)malloc(sizeof(struct TreeNode)); temp = stack[index--]; if(temp->right){ stack[++index] = temp->right; } if(temp->left){ stack[++index] = temp->left; } p1->left = NULL; p1->right = temp; p1 = p1->right; } p1-

删除排序链表中的重复元素——python

…衆ロ難τιáo~ 提交于 2020-03-08 21:04:03
问题描述 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3->3 输出: 1->2->3 双指针代码 class Solution : def deleteDuplicates ( self , head : ListNode ) - > ListNode : p = head q = head while q : if p . val != q . val : p . next = q p = p . next q = q . next if p : p . next = None return head 运行结果 来源: CSDN 作者: Formaterror 链接: https://blog.csdn.net/fromatlove/article/details/104737649

DS博客作业01-线性表

白昼怎懂夜的黑 提交于 2020-03-08 19:50:40
0.PTA得分截图 1.1 线性表学习总结 1.线性表的基本概念 线性表是一个具有n个相同特性的有限序列,所有元素都属于同一种数据类型。线性表的逻辑结构简单,便于实现和操作,运用范围广泛。按照存储方式可以分为:顺序表和链表。 2.顺序表 将数据依次存储在连续的整块物理空间中,各结点间的存储单元地址是连续的。 结构体定义 typedef struct node{ ElemType data[MAX]; int length;//保存线性表的长度,或者也可以定义int型变量last用于保存线性表中最后一个数据所在的位置下标。 }Node,*NodeList; 基本操作 顺序表的插入 :实质上就是移动数组的操作,可以从头开始遍历,找到插入的位置后,开始移动数组,或者从末尾开始边移动数组边比较,找到插入的位置后,直接插入; 伪代码: void InserList(NODE & list,int x) { 判断顺序表是否满了,如果满了就return for i=list.length to 0 //从末尾开始一个一个把数据右移,直到找到x的插入位置停止。 if x>list.data[i-1] //找到插入位置,退出循环; break; else list.data[i]=list.data[i-1];//数据进行右移; end if end for list.length++;/

第一次博客作业——线性表

匆匆过客 提交于 2020-03-08 19:46:53
0.PTA得分截图 1.本周学习总结 1.1 总结线性表内容 * 一.顺序表: 顺序表存储结构:把线性表中的所有元素按照顺序存储方式进行存储的结构成为顺序表。 顺序存储的优缺点: 优点: 1.逻辑相邻,物理相邻 2.无须为表示表中元素之间的顺序关系增加额外的存储空间 3.可随机存取任一元素 4.存储空间使用紧凑 缺点: 1.插入、删除操作需要移动大量的元素(除操作在表尾的位置进行外) 2.预先分配空间需按最大空间分配,利用不充分 3.表容量难以扩充 顺序表的特点:1.实现数据元素逻辑上相邻即物理地址相邻; 2.可以实现数据元素的随机存取;(以数组的形式存储) 图示如下: 顺序表的结构体定义: 栈区例子: typedef int ElemType; typedef struct { ElemType data[MaxSize]; //存放顺序表元素 int length ; //存放顺序表的长度 } List; typedef List *SqList; 堆区例子: * 顺序表基本操作 顺序表的初始化:(创建一个新链表) void CreateList(SqList& L, int n) { int index = 0; //初始化顺序表 L = new List; L->length = n; //给表中数据元素赋值 while (n--) cin >> L->data[index

DS博客作业02--线性表

好久不见. 提交于 2020-03-08 19:05:04
0.PTA得分截图 1.本周学习总结 1.1 总结线性表内容 1.顺序表结构体定义、顺序表插入、删除的代码操作 顺序表的定义: 线性表的顺序存储又称为顺序表。 它用一组地址连续的存储单元,依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。 第 1 个元素存储在线性表的起始位置,第 i 个元素的存储位置后面紧接着存储的是第 i+1 个元素。 因此,顺序表的特点是表中元素的逻辑顺序与其物理顺序相同。 顺序表结构体的定义:typedef int ElemType即是定义数据元素类型,可以适应更多类型; typedef struct的内容就是定义了定义顺序表类型,只是定义了一个类型,而不是变量; 顺序表结构的定义,对于在代码的后续操作起着关键性作用,所以在结构体的定义中要仔细。 顺序表插入、删除的代码操作:顺序表的插入和删除操作,在顺序表开始寻找到相对性的数值, 就开始执行操作。删除操作针对于区间删除来说,先从第一个for循环开始执行,定义三个变量, 找到重复元素就开始删除操作。顺序表的插入删除都是要遍历链表,找到相对应的元素进行操作。 2.链表结构体定义、头插法、尾插法、链表插入、删除操作 链表结构体的定义:对于单链表而言,先定义的一个结构体用来描述单链表的结点。从这个结构 定义中,我们知道,结点由存放数据元素的数据域存放后继结点地址的指针域组成

链表的逆置

吃可爱长大的小学妹 提交于 2020-03-08 18:46:00
数据结构实验之链表三:链表的逆置 oblem Description 输入多个整数,以-1作为结束标志,顺序建立一个带头结点的单链表,之后对该单链表的数据进行逆置,并输出逆置后的单链表数据。 Input 输入多个整数,以-1作为结束标志。 Output 输出逆置后的单链表数据。 Input 12 56 4 6 55 15 33 62 -1 Sample Output 62 33 15 55 6 4 56 12 Hint 不得使用数组。 # include <bits/stdc++.h> using namespace std ; struct node { int data ; struct node * next ; } ; int main ( ) { struct node * head , * tail , * p ; head = ( struct node * ) malloc ( sizeof ( struct node ) ) ; head - > next = NULL ; tail = head ; while ( 1 ) { p = ( struct node * ) malloc ( sizeof ( struct node ) ) ; scanf ( "%d" , & p - > data ) ; if ( p - > data == - 1 )

java基础(三)hashMap底层原理

戏子无情 提交于 2020-03-08 17:29:59
HashMap底层原理 hashMap底层原理主要是jdk1.7和1.8以上的区别。 jdk1.7中底层是由数组(也有叫做“位桶”的)+链表实现;jdk1.8中底层是由数组+链表/红黑树实现。 参考学习: https://blog.csdn.net/jswd_50x/article/details/86542240 HashMap面试题 1.谈一下HashMap的特性? 2.谈一下HashMap的底层原理是什么? 3.谈一下hashMap中put是如何实现的? 4.谈一下hashMap中什么时候需要进行扩容,扩容resize()又是如何实现的? 5.谈一下hashMap中get是如何实现的? 6.谈一下HashMap中hash函数是怎么实现的?还有哪些hash函数的实现方式? 7.为什么不直接将key作为哈希值而是与高16位做异或运算? 8.为什么是16?为什么必须是2的幂?如果输入值不是2的幂比如10会怎么样? https://blog.csdn.net/sidihuo/article/details/78489820 https://blog.csdn.net/eaphyy/article/details/84386313 9.谈一下当两个对象的hashCode相等时会怎么样? 10.如果两个键的hashcode相同,你如何获取值对象? 11.

白话平衡二叉树

眉间皱痕 提交于 2020-03-08 16:15:56
  对于我们做Java开发的程序员来,绝大多数时候我们并不需要自己去实现一个平衡二叉树的数据结构,很多用到二叉树的地方都是封装好的算法,我们只需要利用暴露出来的API就行了,那么对于平衡二叉树,虽然不需要去实现,但是理解原理对我们是很有帮助的,特别是底层如果使用了平衡二叉树,那么就能够清晰的知道他的性能。   那么我们怎么样去理解平衡二叉树呢?   我们都清楚,二叉树的查找性能最坏是链表查找,复杂度是O(1),而平衡二叉树的复杂度是log2(N),这在数据量比较大的情况下性能差距是很大的。所以我们就要尽量把树变成平衡二叉树,也就是所谓的高度平衡。最坏性能的情况是链表,对于这种数据结构来说,给我们感性的认识是这种数据结构很瘦,而满二叉树,完全二叉树很胖,因为胖,所以层数少,所以查找性能好。因此构建二叉树的时候要尽量做到很胖,而不要很瘦。这就是平衡二叉树。   另外,关于构建二叉树的时候,有什么左旋转,有旋转,什么LL,RR,LR,RL这几种型号,其实也不用去记这种结构,我们只需要知道,假如有3个节点的链表,顺序增大或者减小,我们要把这种结构的链表编程二叉树,只需要用手抓住中间节点向上提一下,让中间节点在上方,两头的节点在下方,这就是让我们的层数减少了1,也就是在插入的时候平衡因子为2的时候破坏平衡性的时候,向上一提,层数减少1,于是又回到了平衡二叉树。这里说的是3个节点的顺序链表(用