ds200902_线性表.pptVIP

  • 3
  • 0
  • 约1.38万字
  • 约 77页
  • 2017-03-26 发布于贵州
  • 举报
ds200902_线性表ds200902_线性表

北京化工大学信息学院 数据结构 数据结构 北京化工大学 信息科学与技术学院计算机系 史晟辉 shishenghui@ shish@ 第二章 线性表 线性表 顺序表 链表 顺序表与链表的比较 线性表 (Linear List) 线性表的定义和特点 定义 n( ? 0)个数据元素的有限序列,记作 (a1, a2, …, an) ai 是表中数据元素,n 是表长度。 顺序表 (Sequential List) 顺序表的定义 顺序表的特点 顺序表的连续存储方式 顺序表(SeqList)的定义 顺序表(SeqList)的操作 顺序表的应用 顺序表 (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; } 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; } 顺序查找图示 顺序表 (Sequential List) 顺序表的定义 顺序表的特点 顺序表的连续存储方式 顺序表(SeqList)的定义 顺序表(SeqList)的操作 顺序表的应用 链表(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; 删除 第一种情况: 删除表中第一个元素 第二种情况: 删除表中或表尾元素 带表头结点的单链表 表头结点位于表的最前端,本身不带数据,仅标志表头。 设置表头结点的目的是 统一空表与非空表的操作 简化

文档评论(0)

1亿VIP精品文档

相关文档