【数据结构】初识数据结构

1.什么是数据结构?

在这里插入图片描述
编程就是我们使用编程语言来处理特定数据来实现某个目标的过程,其中语句的处理过程就是算法,而数据的组织方式就是数据结构。数据的组织方式当然会影响程序的处理效率,所以针对不同场景需要有针对性地组织数据,即选择合适的数据结构。

2.数据结构有哪些类型?

数据结构可以按照逻辑结构和物理结构来分类。

逻辑是指各个数据之间的关系规则,常见的可分为集合结构(相同类型的数据集)、线性结构(数据之间单线关联)、树形结构(数据之间为一对多关联)、图形结构(数据之间为多对多关联)。
逻辑结构分类
物理结构是指数据的物理存储之间的联系,有顺序存储结构(数据在内存中依次存放)和链式存储结构(数据的物理地址并不相邻,分散各处)。
存储结构分类
比如说数组(Array)是一种常见的数据结构,它的各个元素之间是线性关联,在物理内存中也是放在一块连续的空间;栈(Stack)是一种数据呈线性排列的数据结构,它的特点是“先进后出”,像一个弹匣,先存入的元素只能后取出。它们都有各自适用的场景,数组存放相同类型的元素(比如某个科目的成绩),可以做排序等操作;栈可以用来做进制转换、表达式转换等操作。
数组:数组
栈:
栈

其他的常用数据结构还有:队列(Queue)、链表(Linked List)、树(Tree)、图(Graph)、堆(Heap)、散列表(Hash)等。
队列:
队列
链表:
链表
树:
树
图:
图
散列表:
散列表
堆:
堆

3.常见数据结构的实现

3.1数组

数组是最常用的一种数据结构,用来存储同一类型值的集合。Java提供的数组类为:java.util.ArrayList。数组的特点是其中的元素可以通过数组下标来访问,下标从0开始:

  int[] data = new int[10];  //初始化一个长度为10的整型数组

  data[0] = 2;  //给第一个元素赋值
  data[1] = 4;

  int temp = data[1];
  System.out.println("temp=" + temp);

数组的特点:
1.取元素快捷,任何位置上的元素都可以直接按下标获取;
2.插入元素复杂,在i位置插入一个元素,则i之后的所有元素都要向后移动一次,若数组内的元素数量巨大,则非常耗时;
3.删除元素与插入类似,删除i位置元素,则它后面的元素都要向前移动一个位置,同样可能非常耗时;

优点:
1.访问元素快;
2.遍历数组方便(循环遍历即可);
缺点:
1.元素多时,数组的插入、删除操作较慢;
2.数组大小固定,无法扩容;
3.数组只能存储一种类型的数据;
适用场景:
查询多而增删少,数据改动不频繁的数据可以用数组存储。

3.2栈

下压栈(或简称栈)是一种基于后进先出(LIFO)策略的集合类型。栈就像一个弹匣,新存入的元素永远在栈的顶端,取元素的时候也是从最后存入的开始取。数据的入栈动作称为压栈,出栈动作称为弹栈。
栈
Java提供的栈类为:java.util.Stack,常用方法如下:

Stack<Character> zh = new Stack<>();
        zh.push('w');   //压入‘w’
        zh.push('h');   //压入‘h’
        System.out.println("栈zh是否为空:"+zh.empty());  //判断栈是否为空
        System.out.println("取栈顶元素:"+zh.pop());      //取栈顶元素并从栈中删除
        System.out.println("再取一个:"+zh.peek());       //取栈顶元素但不删除
        System.out.println("栈zh是否为空:"+zh.empty());  //判空

结果:
栈zh是否为空:false
取栈顶元素:h
再取一个:w
栈zh是否为空:false

应用场景:
数制转换、括号匹配等(后续写具体实现)。

Java提供了常用数据结构的实现,我们也可以用其他方式实现这些数据结构,后续再写其他的数据结构的用法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值