面试_线性数据结构_数组_链表

数组和链表

a、数组:存放着一组相同类型的数据,需要预先指定数组的长度,有一维数组、二维数组、多维数组等

b、链表:链表是C语言中一种应用广泛的结构,它采用动态分配内存的形式实现,用一组任意的存储单元存放数据元素链表的,一般为每个元素增设指针域,用来指向后继元素

c、数组和链表的区别:

从逻辑结构来看:数组必须事先定义固定的长度,不能适应数据动态地增减的情况;链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项(数组中插入、删除数据项时,需要移动其它数据项)
从内存存储来看:(静态)数组从栈中分配空间(用NEW创建的在堆中), 对于程序员方便快速,但是自由度小;链表从堆中分配空间, 自由度大但是申请管理比较麻烦
从访问方式来看:数组在内存中是连续存储的,因此,可以利用下标索引进行随机访问;链表是链式存储结构,在访问元素的时候只能通过线性的方式由前到后顺序访问,所以访问效率比数组要低
数组的优点:随机访问性强、查找速度快
数组的缺点:插入和删除效率低、可能浪费内存、内存空间要求高,必须有足够的连续内存空间。数组大小固定,不能动态拓展
链表的优点:插入删除速度快、内存利用率高,不会浪费内存、大小没有固定,拓展很灵活。
链表的缺点:不能随机查找,必须从第一个开始遍历,查找效率低
- 数组 链表
读取 O(1) O(n)
插入 O(n) O(1)
删除 O(n) O(1)

d、操作

数组

    每个数据元素会被分配一个正的数值,叫作“索引”,它对应该元素在数组中的位置。大部分编程语言都将初始索引定义为 0.

    两种数组

  • 一维数组
  • 二维数组

基本操作

  • Insert——在给定索引位置插入一个元素
  • Get——返回给定索引位置的元素
  • Delete——删除给定索引位置的元素
  • Size——获取数组内所有元素的总数

链表

链表是另一个重要的线性数据结构,刚一看可能看起来像数组,但在内存分配,内部结构以及如何执行插入和删除的基本操作方面有所不同。
链表就像一个节点链,其中每个节点包含数据和指向链中后续节点的指针等信息。有一个头指针,指向链表的第一个元素,如果列表是空的,那么它只指向 null 或不指向任何内容

猜你喜欢

转载自www.cnblogs.com/JameSLW-LEO/p/10660846.html