2.7单链表进阶(取值查找插入删除)

算法一 取值

Status GetElem_L(LinkList L, int i, ElemType& e) {
	p = L->next; j = 1;
	while (p && j < i) {
		p = p->next; ++j;
	}
	if (!p || j > i)return ERROR;
	e = p->data;
	return OK;
}

 算法二 查找

时间复杂度为O(n)

//按值查找,返回地址
Lnode* LocateElem_L(LinkList L, ElemType e) {
	p = L->next;
	while (p && p->data != e)
		p = p->next;
	return p;
}
//按值查找,返回序号
int LocateElem_L(LinkList L, ElemType e) {
	p = L->next; j = 1;
	while (p && p->data != e) {
		p = p->next;j++
	}
	if (p)return j;
	else return 0;
}

算法三 插入

插入是有顺序的,时间复杂度为O(1)

 

Status ListInsert_L(LinkList& L, int i, ElemType e) {
	p = L; j = 0;
	while (p && j < i - 1) {//p不是空表
		p = p->next;//找到第i-1的位置
		++j;
	}
	if (!p || j > i - 1)return ERROR;//I大于表长+1或者小雨1,插入位置非法
	s = new LNode;
	s->data = e;//生成新结点S,将S的数据阈设置为e
	s->next = p->next;
	p->next = e;
	return OK;
}//ListInsert_L

算法四 删除

时间按复杂度为O(1)

Status ListDelete_L(LinkList& L, int i, ElemType& e) {
	p = L; j = 0;
	while (p->next && j < i - 1) { p = p->next; ++j; }//寻找第i个结点并令p指向其前驱
	if (!(p->next) || j > i - 1)return ERROR;//删除位置不合理
	q = p->next;//临时保存被删除结点
	p->next = q->next;//改变删除节点前驱的指针域
	e = q->next;//保存删除节点的数据阈
	delete q;//释放删除节点的空间
	return OK;
}//ListDelete_L

 地址和数据不是一个东西,放在节点里边才是一个东西,才有删除这个概念。

PS:

红点为p的next阈,存的是ai的地址 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值