数据结构D6

本文介绍了在C语言中如何实现双向链表的尾部删除(delete_rear)和整体释放(free_space),以及在主函数中进行尾插、尾删和释放操作的示例。
摘要由CSDN通过智能技术生成

双向链表尾删

实现函数:

//尾删
linklist delete_rear(linklist L)
{
	if(NULL == L)
	{
		return NULL;
	}
	else if(NULL == L->next)
	{
		free(L);
		L = NULL;
	}
	else
	{
		linklist p = L;
		while(p->next!= NULL)
		{
			p = p->next;
		}
		free(p);
		p->priv->next = NULL;
	}
	return L;
}


双向链表释放

实现函数:

//释放
linklist free_space(linklist L)
{
	if(NULL == L)
	{
		return NULL;
	}
	else
	{
		while(L != NULL)
		{
			L = delete_rear(L);
		}
	}
	return L;
}

主函数:

#include"head.h"

int main()
{
	linklist L=NULL;
	int n = 0;
	printf("please enter n:");
	scanf("%d",&n);
	char element;
	//尾插
	for(int i = 0 ; i < n ; i++)
	{
		printf("please enter %d element:",i+1);
		scanf(" %c",&element);
		L = insert_rear(L,element);
	}
	printf("尾插后:\n");
	output(L);
	
	//尾删
	printf("尾删后:\n");
	L=delete_rear(L);
	output(L);

	L = free_space(L);
	output(L);
	return 0;
}

运行结果:

双向循环链表尾删

实现函数:

//尾删
linklist delete_rear(linklist L)
{
	if(NULL == L)
	{
		return NULL;
	}
	else if(L == L->next)
	{
		free(L);
		L = NULL;
	}
	else
	{
		linklist p = L->priv;
		p->priv->next = L;
		L->priv = p->priv;
		free(p);
		p = NULL;
	}
	return L;
}

双向循环链表释放

实现函数:

//释放
linklist free_space(linklist L)
{
	if(NULL == L)
	{
		return NULL;
	}
	else
	{
		while(L != NULL)
		{
			L = delete_rear(L);
		}
	}
	return L;
}

主函数:

#include"head.h"

int main()
{
	linklist L=NULL;
	int n = 0;
	printf("please enter n:");
	scanf("%d",&n);
	char element;

	//尾插
	for(int i = 0 ; i < n ; i++)
	{
		printf("please enter %d element:",i+1);
		scanf(" %c",&element);
		L = insert_rear(L,element);
	}
	printf("尾插后:\n");
	output(L);

	
	//尾删
	printf("尾删后:\n");
	L=delete_rear(L);
	output(L);

	L = free_space(L);
	output(L);
	return 0;
}

运行结果:

Xmind

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值