NDK-033: 数据结构和算法:数组与链表

33:数据结构和算法:数组与链表

1.数据结构与算法基本概念。

单列表翻转,判断平衡二叉树。
string 转int,边界判断,
大数据相乘。
海量数据筛选5个最大数据。
《算法4-红色壳子》

数据结构

数据元素之间的关系
集合结构,线性关系,树形关系,图形结构等。
存储结构:顺序存储、链式存储。
程序 = 数据结构+算法。
算法的特性:输入、输出、有穷性、确定性和可行性。

2.时间复杂度和空间复杂度

算法的优劣:从算法的执行时间和 所占用的存储空间两方面衡量。会求时间和空间的复杂度。

  • 时间复杂度:定性描述了该算法的运行时间,时间复杂度常用大O符号表示。
    可以理解为代码执行的步骤
  • 空间复杂度:对一个算法运行过程中临时占用存储空间大小的量度。
    malloc(sizeof(char) *n); // 空间O(n),字符串反转

常见的时间复杂度:
常数阶O(1),
对数阶O(log2 n),
线性阶O(n),
线性对数阶O(n *log2n),
平方阶O(n^2),
立方阶O(n^3),
k次方阶O(n^k),
指数阶O(2^n)

很多时候,需要拿空间复杂度 换时间复杂度

统计一篇文章字符出现的个数。
1.Map集合查询。key存字母,value存储出现的次数。时间复杂度O(n)+ Map查询
2.定义一个123长度的数组,arr['c'] = arr['c']++;
只有一步,空间换时间。

3.数组与链表源码分析

//www.greatytc.com/p/66baa9a5f855

  1. ArrayList 源码分析【底层基于数组】:构造函数默认长度10, len += len>>1; 扩容时要开辟空间对原来的数据进行拷贝。
    新增时涉及到开辟新空间、数据拷贝、释放原来的old指针(析构掉),插入数据快。
    但是访问数据直接通过角标访问。
    移除数据remove,当到达一定阈值,会开辟一块更小的空间,然后将数据拷贝过去。
    删除数据,移除当前位置,后面的所有数据往前copy。

  2. LinkedList源码【双向链表】,每个Node有prev、next两个指针。
    整个链表维护header、last指针
    添加节点:创建新节点newNode,当前节点的prev= 原来链表的last;

void linkLast(E e){ // 添加节点
    final Node<E> l = last;
    final Node<E> newNode = new Node<>(l, e, null);
    last = newNode; // last的next 指向新的节点。
    if(l == null) // 没有last节点,数据为空。 first,last都为新节点。   
        first = newNode;
    else
        l.next = newNode;
    size++;
    modCount++;
}
单链表实现LinkedList,有什么缺点?因为查找速度太慢了,用空间换时间。
c++的list,也是使用双向链表。

#include <iostream>
using namespace std;
/*
// 比如我们现在 求 1+2+3+4+***+n
// 任何算法在特定执行的 n 步骤下,我们都可以推演出算法的复杂度(时间,空间)
// 简单的理解为执行的步骤 
int sum1(int n){// n + 2 步   O(n) 
    int sum = 0;// 1 步
    for (int i = 0; i <= n; i++)// n 步
    {
        sum += i;
    }
    return sum;// 1步 
}
int sum2(int n){ // O(1)
    return (1 + n)*n / 2;// 1 步
}

// 空间复杂度 反转一个字符串   aaa222bbb -> bbb222aaa
char* reverse1(char str[], int n){ // O(n)
    // 第一种写法
    // 创建一个新的数组
    char* res = (char*)malloc(sizeof(char)*n);// 1 空间 O(n)

    // 倒序循环
    for (int i = n; i >= 0; i--) // n 
    {
        // 赋值
        // res[n - i] =  
    }
    return res;// 1
}

void reverse2(char str[], int n){// 空间的复杂度是 O(1)  时间的复杂度 O(n)  
    int mid = n / 2;
    for (int i = 0; i < mid; i++)
    {
        // i 的位置和 i+mid 的位置进行交换
        // 交换 1 次交换是两次赋值
    }
}

void main(){
    // int sum = sum2(100);
    // cout << "sum = " << sum << endl;
    int n = (int)'b';// a 97 
    // 'z' 122 
    cout << n << endl;
    getchar();
}

// 读一篇因为文档统计字符出现的个数
void main(){
    // 一个字符一个字符的读过来
    char* str = "zxcvbnmsdfghjklertyuiop tyuiocvbnm";
    // 开辟一块内存大小数组,用空间换时间,里面默认值都是0 
    int aisc[123] = {0};
    // 当我读到一个字符 , 'a' , 'b '
    int index = (int)'d';
    aisc[index]++;

    // 最后一个for循环输出 ,变种 2000 个数字(1,2000),统计数字出现的次数。
    getchar();
}
*/

// 数组与链表源码分析 
// C++基础 - 实现 Native 层的 ArrayList

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容