例3、学生健康情况登记表如下 姓名学号性别年龄健康情况 王小林790631男 18 健康 陈红70632女20般 刘建平790633男 21 健康 张立立790634男17神经衰弱
例3、学生健康情况登记表如下: 姓 名 学 号 性 别 年龄 健康情况 王小林 790631 男 18 健康 陈 红 790632 女 20 一般 刘建平 790633 男 21 健康 张立立 790634 男 17 神经衰弱 …….. …….. ……. ……. ……
例4、一副扑克的点数 (2,3,4,…,J,Q,K,A) 从以上例子可看出线性表的逻辑特征是: 在非空的线性表,有且仅有一个开始结点a1 它没有直接前趋,而仅有一个直接后继a2 有且仅有一个终端结点an,它没有直接后继, 而仅有一个直接前趋an1 其余的内部结点a(2至in-1)都有且仅有一个 直接前趋a;1和一个直接后继ai1 线性表是一种典型的线性结构。 数据的运算是定义在逻辑结构上的,而运算 的具体实现则是在存储结构上进行的。 抽象数据类型的定义为:P9
⚫ 例4、一副扑克的点数 ⚫ (2,3,4,…,J,Q,K,A) 从以上例子可看出线性表的逻辑特征是: ➢ 在非空的线性表,有且仅有一个开始结点a1, 它没有直接前趋,而仅有一个直接后继a2; ➢ 有且仅有一个终端结点an,它没有直接后继, 而仅有一个直接前趋a n-1; ➢ 其余的内部结点ai (2≦i≦n-1)都有且仅有一个 直接前趋a i-1和一个直接后继a i+1。 线性表是一种典型的线性结构。 ⚫ 数据的运算是定义在逻辑结构上的,而运算 的具体实现则是在存储结构上进行的。 ⚫ 抽象数据类型的定义为:P19
算法2.1 例2-1利用两个线性表LA和LB分别表示两个集 合A和B,现要求一个新的集合A=AUB void union( List &La, List Lb)( La-len=listlength (La) Lb-len=listlength (Lb); for(I=1; K=1b-len; I++)i getelem(lb, I, e) if(!locateelem(la, e, equal))listinsert(la ++la-en,e)
算法2.1 ⚫ 例2-1 利用两个线性表LA和LB分别表示两个集 合A和B,现要求一个新的集合A=A∪B。 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) } } ⚫
算法22 例2-2已知线性表LA和线性表LB中的数 据元素按值非递减有序排列,现要求将 LA和LB归并为一个新的线性表LC,且 LC中的元素仍按值非递减有序排列 此问题的算法如下:
⚫ 算法2.2 ⚫ 例2-2 巳知线性表LA和线性表LB中的数 据元素按值非递减有序排列,现要求将 LA和LB归并为一个新的线性表LC,且 LC中的元素仍按值非递减有序排列。 ⚫ 此问题的算法如下:
void mergelist(list la, list Ib, list &lc) initlist(Ic) I=j=1;k=0 la-len=listlength(la) Ib-len=listlength(Ib) while((<=la-len)&&(<=lb-len))i
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)){