数据结构与算法(Java实现)之 【线性表】

一、线性表及其抽象数据类型

PS:数组和链表都是线性表,只不过是存储方式不同
数据结构与算法(Java实现)之 【线性表】_第1张图片
数据结构与算法(Java实现)之 【线性表】_第2张图片
数据结构与算法(Java实现)之 【线性表】_第3张图片
数据结构与算法(Java实现)之 【线性表】_第4张图片
数据结构与算法(Java实现)之 【线性表】_第5张图片
数据结构与算法(Java实现)之 【线性表】_第6张图片
线性表的抽象数据模型
数据结构与算法(Java实现)之 【线性表】_第7张图片

二、数组

(1)数组的3个特点

数据结构与算法(Java实现)之 【线性表】_第8张图片

(2)数组的基本运算

查找

数据结构与算法(Java实现)之 【线性表】_第9张图片

插入

伪代码步骤

  • 判断插入位置是否合法
  • 判断表是否已满
  • 腾出第i个位置
  • 插入e

删除

  • 判断删除位置是否合法
  • 删除e
  • 将后续元素依次往前移动

(3)评价数组

数据结构与算法(Java实现)之 【线性表】_第10张图片

详细优缺点

数据结构与算法(Java实现)之 【线性表】_第11张图片

三、链表

1、类型

数据结构与算法(Java实现)之 【线性表】_第12张图片

2、什么是单链表

数据结构与算法(Java实现)之 【线性表】_第13张图片
数据结构与算法(Java实现)之 【线性表】_第14张图片

3、求单链表的长度的C语言算法

int	ListLength(LinkList L) 
{   
      Node *p; 
      p=L->next;	
      j=0;   
      while(p!=NULL)
      {	
          p=p->next; 
          j ++; 
      }
      return j;
}

4、在单链表上的基本运算

(1)新建单链表

数据结构与算法(Java实现)之 【线性表】_第15张图片

数据结构与算法(Java实现)之 【线性表】_第16张图片

(2)查找

每次都只能从头结点一个一个遍历下去

(3)插入

先立后破再立
数据结构与算法(Java实现)之 【线性表】_第17张图片

(4)删除

也是先立后破
数据结构与算法(Java实现)之 【线性表】_第18张图片

5、单链表特点

  • 空间上:
    动态链表的特点在于可动态生成,因其需用指针表示元素间的逻辑关系,故其存储密度较低
    存储密度=元素本身占用存储量 / 结点占用存储量
  • 时间上:
    动态链表的特点在于插入、删除操作时只改指针不移动元素,但不能随机存取表中元素,需顺链找;

6、循环链表

数据结构与算法(Java实现)之 【线性表】_第19张图片
数据结构与算法(Java实现)之 【线性表】_第20张图片
数据结构与算法(Java实现)之 【线性表】_第21张图片
数据结构与算法(Java实现)之 【线性表】_第22张图片
数据结构与算法(Java实现)之 【线性表】_第23张图片

7、双向链表(Double Linked List)

(1)为什么需要双向链表

数据结构与算法(Java实现)之 【线性表】_第24张图片

(2)示意图

数据结构与算法(Java实现)之 【线性表】_第25张图片

(3)插入元素

数据结构与算法(Java实现)之 【线性表】_第26张图片

(4)删除元素

数据结构与算法(Java实现)之 【线性表】_第27张图片

你可能感兴趣的:(#,数构+算法+设计分析,数据结构,算法,java)