数据结构与算法(青岛大学-王卓老师)——学习笔记(第4周)

p35-p36循环链表的基本操作的实现:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

// 合并循环列表 ta tb都是尾指针
LinkList Connect(LinkList ta,LinkList tb)
{
	p = ta->next;
	ta->next = tb->next>next;
	delete tb->next;
	tb->next = p;
	return tb;
}

p38双向链表的基本操作的实现:——插入操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
p38双向链表的基本操作的实现:
在这里插入图片描述在这里插入图片描述

// 定义循环双联表
typedef struct DuLnode{
	Elem data;
	struct DuLnode* piror,next;
}DuLonde,*DuLinkList;

// 获取循环双向列表的中的第i个元素的地址
DuLnode* GetElemP_Dul(DuLinkList L,int i)
{
	DuLnode* p;
	p = L->next;
	for(int j = 1;j<i;j++)
	{
		p = p->next
	}
	return p;
}

// 双向链表的插入 (第i个位置插入数据e)
status ListInstert_DuL(DuLinkList& L,int i,ElemType e)
{
	DuLnode* p;
	if(!(p=GetElemP_Dul(L,i))) return ERROR;
	s = new DuLnode;
	s->data = e;
	s->prior = p->prior;
	p->prior->next = s;
	s->next = p;
	p->prior = s;
	return OK;
}

p39双向链表的基本操作的实现:——删除操作
在这里插入图片描述
在这里插入图片描述

// 双向循环链表的删除(删除第i个元素,并用e返回)
status ListDelete_L(LinkList& L,int i, ElemType e)
{
	DuLnode* p;
	if(!(p = GetElemP_Dul(L,i))) return ERROR;
	e = p->data;
	p->prior->next = p->next;
	p->next->prior = p->prior;
	free(p);
	return OK;
}

p40单链表、循环链表、双向链表时间效率比较:——删除操作
在这里插入图片描述
p41顺序表、链表的比较:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
p42线性表的应用——线性表的合并:
在这里插入图片描述
p43线性表的应用——有序表的合并:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

// 有序表的合并——顺序表的实现
void MergeList_Sq(SqList LA,SqList LB,SqList& LC)
{
	ElemType* pa;
	ElemType* pb;
	pa = LA.elem;  // 指针指向首元素
	pb = Lb.elem;
	
	LC.elem = new ElemType[LA.length+LB.length];
	pc = LC.elem; // 指针指向首元素
	
	pa_last = LA.elem+(pa.length-1);
	pb_last = LB.elem+(pb.length-1); //指向最后一个元素
	
	// 较小的值存入
	while(pa<pa_last&&pb<pb_last)
	{
		if(*pa<=*pb) *pc++ = *pa++;
		else *pc++ = *pb++;
	}
	
	// 将剩余的元素存如LC中
	while(pa<pa_last) *pc++ = *pa++;
	while(pb<pb_last) *pc++ = *pb++;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

// 有序表的合并——链表实现
void MergeList_L(LinkList& La,LinkList& Lb,LinkList& Lc)
{
	ElemType* pa = La->next; ElemType* pb = Lb->next;
	ElemType* pc = Lc = La; // 将新的链表指向La

	while(pa&&pb)
	{
		if(pa->data <= pb->data)
		{
			pc->next = pa;
			pc = pa; // 向前
			pa = pa->next;
		}
		else
		{
			pc->next = pb;
			pc = pb;
			pb = pb->next;
		}
	}
	pc->next = pa?pa:pb;
}

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值