线性表1-线性表的类型定义
一个线性表是n个数据结构的有限序列。
基本操作
基本操作 | 操作结果 |
---|---|
InitList(&L) | 构造空的线性表 |
DestroyList(&L) | 销毁线性表L |
ClearList(&L) | 将L置为空表 |
ListEmpty(L) | L为空返回True否则返回Flase |
ListLength(L) | 返回L中元素个数 |
GetElem(L,i,&e) | 用e返回L中第i个元素值 |
PriorElem(L,cur_e,&pre_e) | cur_e不是第一个元素,用pre_e返回其前驱 |
NextElem(L,cur_e,&next_e) | cur_e不是最后一个元素,用next_e返回其后继 |
ListInsert(&L,i,e) | 在L中第i个位置之前插入e,L的长度加一 |
ListDelete(&L,i,&e) | 删除L中第i个位置的元素,并用e返回其值,L长度减一 |
LocateElem(L,e,compare()) | 返回L中第一个与e满足compare()关系的位序,如果没有,则返回0 |
可以发现被修改的变量表示为&+变量名
且变量顺序为(某个表,某位置上,e)或(某个表,e)
例题
1.合并两个集合
思路
1.在线性表B中依次获取元素
2.在A中查看是否存在B中该元素
3.若不存在则将该元素插入A
void union(List &La,List Lb){
ElemType e;
int i;
int La_len,Lb_len;
La_len=ListLength(La);
Lb_len=ListLength(Lb);
for(i=1;i<=Lb_len;i++){
GetElem(Lb,i,e);
if(!Locate(La,e,equal))
ListInsert(&La,La_len+1,e);
}
}
一些心得
表是从1开始计数的,不同于数组
ElemType 根据表中储存数据的不同而改变
2 顺序合并
思路
1.设一空表Lc
2.设两个指针i,j分别指向La中的a和Lb中的b
3.要插入的元素c为:
(1)a>b c=b
(2)a<b c=a
4.该元素插入后,指针后移
void union(List La,List Lb){
InitList(&Lc);
int i,j,k=0;
ElemType a,b,c;
int La_len,Lb_len;
La_len=ListLength(La);
Lb_len=ListLength(Lb);
while(i<=La_len&&j<=Lb_len){
GetElem(La,i,a);
GetElem(Lb,j,b);
if(a>b){
c=b;
j++;
}
else if(a<b){
c=a;
i++;
}
else{
c=a;
i++;j++;
}
ListInsert(&Lc,++k,c);
}
while(i<=La_len){
GetElem(La,i,&c);
ListInsert(&Lc,++k,c);
i++;
}
while(j<=Lb_len){
GetElem(Lb,i,&c);
ListInsert(&Lc,++k,c);
j++;
}
}