北京化工大学数据结构课件第二章 线性表.pptVIP

  • 1
  • 0
  • 约1.38万字
  • 约 71页
  • 2019-05-06 发布于广东
  • 举报

北京化工大学数据结构课件第二章 线性表.ppt

线性表 顺序表 链表 顺序表与链表的比较 线性表 (Linear List) 线性表的定义和特点 定义 n( ? 0)个数据元素的有限序列,记作 (a1, a2, …, an) ai 是表中数据元素,n 是表长度。 遍历 逐项访问: 从前向后 从后向前 线性表的特点 除第一个元素外,其他每一个元素有一个且仅有一个直接前驱。 除最后一个元素外,其他每一个元素有一个且仅有一个直接后继。 顺序表 (Sequential List) 顺序表的定义和特点 定义 将线性表中的元素相继存放在一个连续的存储空间中。 可利用一维数组描述存储结构 特点 线性表的顺序存储方式 遍历 顺序访问, 可以随机存取 顺序表的连续存储方式 顺序表(SeqList)的定义 #define ListSize 100 //最大允许长度 typedef int ListData; typedef struct { ListData * data; //存储数组 int length; //当前元素个数 } SeqList; 顺序表基本运算的实现 构造一个空的顺序表 void InitList ( SeqList L ) { L.data = ( ListData * ) malloc ( ListSize * sizeof ( ListData ) ); if ( L.data == NULL ) { printf ( “存储分配失败!\n” ); exit (1); } L.length = 0; } 按值查找:在顺序表中从头查找结点值等于给定值 x 的结点 int Find ( SeqList L, ListData x ) { int i = 0; while ( i L.length L.data[i] != x ) i++; if ( i L.length ) return i; else return -1; } 顺序查找图示 链表(Linked List) 链接表是线性表的链接存储表示 单链表 静态链表 循环链表 双向链表 单链表 (Singly Linked List) 特点 每个元素(表项)由结点(Node)构成。 线性结构 结点可以连续,可以不连续存储 结点的逻辑顺序与物理顺序可以不一致 表可扩充 单链表的定义 typedef char ListData; typedef struct node { //链表结点 ListData data; //结点数据域 struct node * link; //结点链域 } ListNode; typedef ListNode * LinkList; //链表头指针 LinkList first; //链表头指针 单链表中的插入与删除 插入 第一种情况:在第一个结点前插入 newnode-link = first ; first = newnode; 第二种情况:在链表中间插入 newnode-link = p-link; p-link = newnode; 第三种情况:在链表末尾插入 newnode-link = p-link; p-link = newnode; 删除 第一种情况: 删除表中第一个元素 第二种情况: 删除表中或表尾元素 带表头结点的单链表 表头结点位于表的最前端,本身不带数据,仅标志表头。 设置表头结点的目的是 统一空表与非空表的操作 简化链表操作的实现。 前插法建立单链表 从一个空表开始,重复读入数据: 生成新结点 将读入数据存放到新结点的数据域中 将该新结点插入到链表的前端 直到读入结束符为止。 后插法建立单链表 每次将新结点加在链表的表尾; 设置一个尾指针 r,总是指向表中最后一个结点,新结点插在它的后面; 尾指针 r 初始时置为指向表头结点地址。 单链表清空 void makeEmpty ( LinkList first )

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档