数据结构-第2章线性表精要.ppt

数据结构-第2章线性表精要

教学目的与要求 熟练掌握顺序表的定义、向量 (或一维数组)的存储、插入、删除元素等运算。 掌握链式表的建立、插入、删除元素等运算。 熟悉链表的连接,多项式的加、减运算等操作。 熟悉循环链、双向链的操作。 重点与难点 重点:概念、基本运算实现方法。 难点:应用。 ;第二章 线性表;线性表(Linear List) :由n(n≧0)个数据元素(结点)a1,a2, …an组成的有限序列。其中数据元素的个数n定义为表的长度。当n=0时称为空表,常常将非空的线性表(n0)记作: (a1,a2,…an) 这里的数据元素ai(1≦i≦n)只是一个抽象的符号,其具体含义在不同的情况下可以不同。 例1、26个英文字母组成的字母表 (A,B,C、…、Z) 例2、某校从1978年到1983年各种型号的计算机拥有量的变化情况。 (6,17,28,50,92,188) ;例3、学生健康情况登记表如下:; 从以上例子可看出线性表的逻辑特征是: 在非空的线性表,有且仅有一个开始结点a1,它没有直接前趋,而仅有一个直接后继a2; 有且仅有一个终端结点an,它没有直接后继,而仅有一个直接前趋a n-1; 其余的内部结点ai(2≦i≦n-1)都有且仅有一个直接前趋a i-1和一个直接后继a i+1。 线性表是一种典型的线性结构。 数据的运算是定义在逻辑结构上的,而运算的具体实现则是在存储结构上进行的。 抽象数据类型的定义为:P19;例2-1 利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A=A∪B。 算法2.1 void union(List La,List Lb) { La-len=listlength(La); Lb-len=listlength(Lb); for(I=1;I=lb-len;I++) { getelem(lb,I,e); if(!locateelem(la,e,equal)) listinsert(la,++la-en,e);} };例2-2 巳知线性表LA和线性表LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的元素仍按值非递减有序排列。 算法2.2 void mergelist(list la,list lb,list lc) initlist(lc); I=j=1;k=0; la-len=listlength(la); lb-len=listlength(lb); while((I=la-len)(j=lb-len)){; getelem(la,I,ai);getelem(lb,j,bj); if(ai=bj){listinsert(lc,++k,ai);++I;} else{listinsert(lc,++k,bj);++j;} } while(I=la-len){ getelem((la,I++,ai);listinsert(lc,++k,ai); } while(j=lb-len){ getelem((lb,j++,bj);listinsert(lc,++k,bi); } } ;2.2.1 顺序表 把线性表的结点按逻辑顺序依次存放在一组地址连续的存储单元里。用这种方法存储的线性表简称顺序表。 假设线性表的每个元素需占用l个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储位置。则线性表中第I+1个数据元素的存储位置LOC( a i+1)和第i个数据元素的存储位置LOC(a I )之间满足下列关系: LOC(a i+1)=LOC(a i)+l 线性表的第i个数据元素ai的存储位置为: LOC(ai)=LOC(a1)+(I-1)*l;由于C语言中的一维数组也是采用顺序存储表示,故可以用数组类型来描述顺序表。又因为除了用数组来存储线性表的元素之外,顺序表还应该用一个变量来表示线性表的长度属性,所以我们用结构类型来定义顺序表类型。 # define ListSize 100 typedef int DataType; typedef struc{

文档评论(0)

1亿VIP精品文档

相关文档