数据结构课件线性表.ppt
文本预览下载声明
数据结构定义——指互相有关联的数据元素的集合,用D_S=( D, S ) 数据结构内容——数据的逻辑结构、存储结构和运算 算法效率指标——时间效率和空间效率 数据结构课程的内容 第2章 线性表 第3章 字符串 第4章 栈和队列 一、教学内容:1、 线性表的定义和性质及基本运算;2、 线性表的顺序存储结构3、 线性表的链式存储结构4、 多项式的代数运算 二、教学要求:1、了解线性表的逻辑结构特性,以及线性表的两种存储实现方式2、熟练掌握两种存储结构的描述方法。链表是本章的重点和难点。3、熟练掌握顺序表的定义与实现,包括查找、插入、删除算法的实现;4、熟练掌握在各种链表结构中实现线性表操作的基本方法,能在实际应用中选用适当的链表结构;5、能够从时间和空间复杂度的角度综合比较线性表两种存储结构的不同特点及其适用场合。 2.1 线性表的逻辑结构 例1 分析26 个英文字母组成的英文表 ( A, B, C, D, …… , Z) 线性表的特征 对于非空的线性表: 有且仅有一个开始结点a1,没有直接前趋,有且仅有一个直接后继a2; 有且仅有一个终结结点an,没有直接后继,有且仅有一个直接前趋an-1; 其余的内部结点ai(2≤i≤n-1)都有且仅有一个直接前趋ai-1和一个ai+1。 线性表顺序存储特点: 1. 逻辑上相邻的数据元素,其物理上也相邻; 2. 若已知表中首元素在存储器中的位置,则其他元素存放位置亦可求出(利用数组下标)。计算方法是(参见存储结构示意图): 设首元素a1的存放地址为LOC(a1)(称为首地址), 设每个元素占用存储空间(地址长度)为L字节, 则表中任一数据元素的存放地址为: LOC(ai) = LOC(a1) + L *(i-1) LOC(ai+1) = LOC(ai)+L 线性表的顺序存储结构示意图 例1 一个一维数组M,下标的范围是0到9,每个数组元素用相邻的5个字节存储。存储器按字节编址,设存储数组元素M[0]的第一个字节的地址是98,则M[3]的第一个字节的地址是 初始化 Status InitList (SqList L) { L.elem=(ElemType*)malloc(MAXSIZE* sizeof(ElemType)) If(! L.elem) exit(OVERFLOW); L.length= 0; return(OK); } 实现步骤: 将第i +1至第n 位的元素向前移动一个位置; 表长减1。 注意:事先需要判断,删除位置i 是否合法? 假定在表中任意位置插入、删除元素都是等概率的, 插入概率p(i)=1/(n+1) ,删除概率q(i)=1/n ,则: 本节小结 链表的特点: 用一组任意的存储单元存储线性表的数据元素 利用指针实现了用不相邻的存储单元存放逻辑上相邻的元素 每个数据元素ai,除存储本身信息外,还需存储其直接后继的信息 结点 数据域:元素本身信息 指针域:指示直接后继的存储位置 概念:空指针,语法用“NULL”;头指针 与链式存储有关的术语: 何谓头指针、头结点和首元结点? 例: 1. 单链表的建立和输出 2. 单链表的修改 3. 单链表的插入 4. 单链表的删除 5. 应用举例 6. 其它链表形式 建立带头结点的单链表 Void CreateList_L(LinkList L,int n) L=(LinkList) malloc(sizeof(Lnode)); L-next=NULL; for(i=n;i0;--i){ p=(Linklist)malloc (sizeof(Lnode)); scanf(p-data); p-next=L-next;L-next=p; 1. 单链表的建立和输出 实例:用单链表结构来存放26个英文字母组成的线性表(a,b,c,…,z),请写出C语言程序。 将全局变量及函数提前说明: #includestdio.h #includestdlib.h typedef struct liu{char data; struct liu*next;} Lnode, *LinkList; Lnode *p,*q,*head; //一般需要3个指针变量 int n ; // 数据元素的个数 int m=sizeof(Lnode); /*结构类型定义好之后,每个变量的长度就固定了,m求一次即可*/ void build() //字母链表的生成。要一个一个慢慢链
显示全部