美文网首页
算法与数据结构(1)

算法与数据结构(1)

作者: 闪客飞飞 | 来源:发表于2020-12-01 21:41 被阅读0次

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。

逻辑结构: 集合结构, 线性结构,树形结构,图形结构。
存储结构: 表,堆栈,队列,数组,树,二叉树,图。

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

常用算法:
▪ 递推法
▪ 递归法
▪ 穷举法
▪ 贪心算法
▪ 分治法
▪ 动态规划法
▪ 迭代法
▪ 分支界限法

时间复杂度 空间复杂度

程序的质量=空间复杂度+时间复杂度+应用场景(重要)

问题:交换两个数的值?
int a = 5;
int b = 6;
// 1. 可读性最好的
int t=a;a=b;b=t;
// 2. 加减法运算
a=a+b;// a=11 b=6
b=a-b;// a=11 b=5
a=a-b;// a=6 b=5
// 3 .位运算 性能最优(没有可读性) 无人机 跑步
a = a ^ b;
b = a ^ b;;
a = a ^ b;
System.out.println("a=" + a + "--- b=" + b);

线性表:
顺序存储结构:
顺序表

链式存储:

节点 : 数据域 指针域

MessageQueue 中message 插入过程

微信图片_20201201210628.png 微信图片_20201201210636.png 微信图片_20201201210640.png 微信图片_20201201210645.png 微信图片_20201201211241.png 微信图片_20201201211246.png radixSort.png

单链表 运用 极速排序 麻将牌排序:

微信图片_20201201213635.png 微信图片_20201201213639.png 微信图片_20201201213643.png 微信图片_20201201222529.png

/**

  • Created by Jett on 2018/11/28.
    */

public class LinkedList<E> {
/**
* 结点
*/
private static class Node<E> {
E item;
Node<E> prev;
Node<E> next;

    public Node(Node<E> prev, E item, Node<E> next) {
        this.item = item;
        this.prev = prev;
        this.next = next;
    }
}

public LinkedList() {

}

//头节点
Node<E> first;
//尾节点
Node<E> last;
//大小
int size;

/**
 * 添加数据在最后
 */
public void add(E e) {
    linkLast(e);
}

/**
 * 添加到最后
 * @param e
 */
private void linkLast(E e) {
    Node<E> newNode = new Node<E>(last, e, null);
    Node<E> l = last;
    last=newNode;

    if(l==null){
        first=newNode;
    }else {
        l.next = newNode;
    }
    size++;
}
/**
 * 查找位置
 */
public E get(int index){
    if(index<0 || index>size){
        return null;
    }
    return node(index).item;
}
/**
 * 获取index位置上的节点
 */
private Node<E> node(int index){

    //如果index在整个链表的前半部分
    if(index<(size>>1)){   //1000 100   10
        Node<E> node=first;
        for (int i = 0; i < index; i++) {
            node=node.next;
        }
        return node;
    }else{
        Node<E> node=last;
        for (int i = size-1; i > index; i--) {
            node=node.prev;
        }
        return node;
    }


}

/**
 * 添加数据在index位置
 */
public void add(int index,E e) {
    if(index<0 || index>size){
        return ;
    }
    if(index==size){
        linkLast(e);
    }else{
        Node<E> target=node(index);//  index=2
        Node<E> pre=target.prev;
        Node<E> newNode=new Node<E>(pre,e,target);

        if(pre==null){
            first=newNode;
            target.prev = newNode;//4
        }else {
            pre.next = newNode;//3
            target.prev = newNode;//4
        }
        size++;
    }

}

/**
 * 删除元素
 */
public void remove(int index){
    Node<E> target=node(index);
    unlinkNode(target);
}

private void unlinkNode(Node<E> p) {//index=2
    Node<E> pre=p.prev;
    Node<E> next=p.next;
    if(pre==null){
        first=p.next;
    }else{
        pre.next=p.next;
    }
    if(next==null){
        last=p.prev;
    }else{
        next.prev=p.prev;
    }
    size--;
}

}

/**

  • Created by Jett on 2018/11/28.
    */

public class test {
@Test
public void test() {
LinkedList<Integer> linkedList=new LinkedList<>();
linkedList.add(0,4);
linkedList.add(0,1);
linkedList.add(0,2);
linkedList.add(0,3);//43 66 12
linkedList.add(0,66);
linkedList.add(0,88);
//0:66 1:4 2:3 3:1 4:2
// linkedList.remove(0);

    for (int i = 0; i < linkedList.size; i++) {
        System.out.print(i+":"+linkedList.get(i)+"    ");
    }
}

}

相关文章

  • 算法与数据结构(1),List

    算法与数据结构(1),List 算法与数据结构(2),Map 算法与数据结构(3),并发结构 习惯了,深夜更新博客...

  • IOS开发_数据结构

    1、数据结构; 2、算法; 3、数据结构与算法; 1、数据结构; 1.1 概念: 数据结构:数据结构是计算...

  • 数据结构与算法

    数据结构与算法之美 数据结构与算法之美1--如何学数据结构与算法之美2--复杂度分析(上)数据结构与算法之美3--...

  • 算法与数据结构(3),并发结构

    算法与数据结构(1),List 算法与数据结构(2),Map 算法与数据结构(3),并发结构 本来已经合上电脑了,...

  • 数据结构与算法-目录

    数据结构与算法-目录 C语言篇 数据结构和算法-C语言篇1-绪论数据结构和算法-C语言篇2-初识算法数据结构与算法...

  • 算法与数据结构(2),Map

    算法与数据结构(1),List 算法与数据结构(2),Map 算法与数据结构(3),并发结构 睡了不到六个小时,被...

  • 数据结构与算法

    参考链接:算法 数据结构与算法 iOS数据结构 和 算法 上 算法 1、数据结构: 集合结构: 线性结构: 树形结...

  • Hash算法

    数据结构与算法分析:大纲数据结构:数组算法:hash算法算法:排序算法Java实现 1 Hash算法? 将任意长度...

  • 数据结构与算法 - 查找

    数据结构与算法系列文章数据结构与算法 - 时间复杂度数据结构与算法 - 线性表数据结构与算法 - 树形结构数据结构...

  • 思维导图之数据结构+算法

    数据结构+算法 = 程序 数据结构比较 参考文章 数据结构与算法数据结构与算法(java)

网友评论

      本文标题:算法与数据结构(1)

      本文链接:https://www.haomeiwen.com/subject/ebndwktx.html