说说为什么学习数据结构和算法

166 阅读2分钟

「这是我参与2022首次更文挑战的第9天,活动详情查看:2022首次更文挑战

一、为什么要学习数据结构和算法

其实,以前我们都会说,学习数据结构有多么多么的重要,长篇大论。这次,我们java程序员来看看数据结构和算法重要性。

例题:判断一个数是否是2的n次方。比如:2,4,8,16是2的n次方;6,10不是。

拿到这道题,用java的思路分析

2:2

4:2*2

8:2 * 2 * 2

16:2 * 2 * 2 * 2

如果一个数除以2,最后余数是0,那么这个数就是2的n次方;如果余数是1,那么就不是。代码实现如下:

public static void main(String[] args) {
        // 随意给一个数,判断这个数是不是2的n次方
        int n = 16;
  
        int yuShu = n%2;
        int chuShu = n/2;
        while (chuShu > 1) {
            yuShu = chuShu % 2;
            chuShu = chuShu / 2;
        }
​
        System.out.println( n + " 这个数" + (yuShu == 0?"是":"不是")+"2的n次方");
​
    }

但是,如果使用数据结构呢?下面来分析一下:将所有的十进制数字都转成2进制

2:10

4:100

8:1000

16:10000

他们的特点是什么呢?第一个数字是1,其余的都是0

而这几个数字之前的一个数字是什么呢?

1:01

3:011

7:0111

15:01111

他们的特点是什么呢?第一个是0,其余的都是1.

利用这两组数字,我们找规律,如果i和i-1按位&与的结果是0,就说明这个i是2的n次方;否则就不是

2 & 1 = 0

4 & 3 = 0

8 & 7 = 0

16 & 15 = 0

但是15 & 14呢,14的二进制数是01110,01111 & 01110 = 00001

所以,通过对数据的分析,我们可以用一句代码判断

if(n & (n=1) == 0) {
  // 这个数就是2的n次方
} else {
  // 否则不是
}

二、数据结构概述

数据结构包括:线性结构和非线性结构

1、线性结构

1)线性结构是最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。

2)线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表成为顺序表,顺序表中的存储元素是连续的

3)链式存储的线性表成为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息。

4)线性结构常见的有:数组、队列、链表和栈,后面我们会详细讲解

2、非线性结构

非线性结构包括:二维数组、多维数组、广义表、树结构、图结构