线性表【数据结构C语言版】(1)

线性表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++;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值