2023.04.21 数据结构day5

一、双向链表

1.双向链表的按位置删除

//双向链表按位置删除
int DeletePos(doublelink L,int pos)
{
	if(L==NULL || L->next==NULL || pos<1 || pos>L->len)
		return -1;
	doublelink p = L;
	for(int i=0;i<pos;i++)
		p = p->next;
	p->prev->next = p->next;
	if(p->next!=NULL)
		p->next->prev = p->prev;
	free(p);
	p=NULL;
	L->len--;
	return 0;
}

2.双向链表的按位置修改

//双向链表按位置修改
int UpdatePos(doublelink L,int pos,datatype e)
{
	if(L==NULL || L->next==NULL || pos<1 || pos>L->len)
		return -1;
	doublelink p = L;
	for(int i=0;i<pos;i++)
		p = p->next;
	p->data = e;
	return 0;
}

3.双向链表的按位置查找

//双向链表按位置查找
int SearchPos(doublelink L,int pos)
{
	if(L==NULL || L->next==NULL || pos<1 || pos>L->len)
		return -1;
	doublelink p = L;
	for(int i=0;i<pos;i++)
		p = p->next;
	printf("该位置的元素为%c\n",p->data);
}

运行结果

zzy@zzy-vm:~/hqrj/struct/day5/22$ gcc *.c
zzy@zzy-vm:~/hqrj/struct/day5/22$ ./a.out 
请输入插入元素个数:5
请输入插入元素:A
请输入插入元素:B
请输入插入元素:C
请输入插入元素:D
请输入插入元素:E
正向遍历
A	B	C	D	E	
逆向遍历
E	D	C	B	A	
请输入删除的位置:3
正向遍历
A	B	D	E	    //删除位置3的元素C
逆向遍历
E	D	B	A	
-----------------------------
请输入修改的位置:3
请输入修改的值:C
正向遍历
A	B	C	E	    //修改位置3的元素D,修改成C
逆向遍历
E	C	B	A	
-----------------------------
请输入查找的位置:4   //查找位置为4的元素,结果为E
该位置的元素为E

二、双向循环链表

1.双向循环链表头插

//双向循环链表头插
int InsertHead(loopdoublelink L,datatype e)
{
	if(L==NULL)
		return -1;
	loopdoublelink s = CreateNode(0);
	if(s==NULL)
		return -1;
	loopdoublelink p = L;

	s->data = e;
	s->next = p->next;
	s->prev = L;

    p->next->prev = s;
	p->next = s;
	L->len++;
	return 0;
}

2.双向循环链表头删

//双向循环链表头删
int DeleteHead(loopdoublelink L)
{
	if(L==NULL || L->next==L)
		return -1;
	
	loopdoublelink p = L->next;
	L->next = p->next;
	p->next->prev = p->prev;
	free(p);
	p=NULL;
	L->len--;
	return 0;
}

3.双向循环链表尾删

//双向循环链表尾删
int DeleteRear(loopdoublelink L)
{
	if(L==NULL || L->next==L)
		return -1;

	loopdoublelink p = L->prev;
	p->prev->next = L;
	L->prev = p->prev;
	free(p);
	p=NULL;
	L->len--;
	return 0;
}

运行结果

zzy@zzy-vm:~/hqrj/struct/day5/33$ gcc *.c
zzy@zzy-vm:~/hqrj/struct/day5/33$ ./a.out 
请输入元素的个数:5
请输入插入的元素:A
请输入插入的元素:B
请输入插入的元素:C
请输入插入的元素:D
请输入插入的元素:E
正向遍历
E	D	C	B	A	
逆向遍历
A	B	C	D	E	
------------------------------
头删一个后的链表结果为
正向遍历
D	C	B	A	
逆向遍历
A	B	C	D	
尾删一个后的链表结果为
正向遍历
D	C	B	
逆向遍历
B	C	D	

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值