无序单链表找出最小值结点

这是一个关于无序单链表的算法题,要求找出最小值节点并根据数值的奇偶性进行操作:奇数则与后继节点交换,偶数则删除后继节点。实现过程中通过特定函数判断奇偶性,源码已提供,作者在解决问题时遇到了*p=list->next 的错误,最终解决了问题。
摘要由CSDN通过智能技术生成

海纳百川,大道致远

时光荏苒,青春在这里生长,为了理想我们在这里摩拳擦掌,
岁月不居,梦想依旧灿烂,纯真的理想在这里放飞。

题目及要求:

设有一个由正整数组成的无序单链表,编写能够完成下列功能的算法:
找出最小值结点,且打印该数值
若该数值是奇数,则将其与直接后继结点的数值交换
若该数值是偶数时,则将其直接后继结点删除
要求:判断奇数或者是偶数需另用函数实现(函数调用)。
存储结构:链表。

思路与分析

这道课设主要是运用了单链表,并且可以借助链表的知识点进行寻找。
无序可以使用随机数来处理;’
运用一个函数来调用判断是否为奇数或者偶数;
奇数:将前面的删除,然后插入到后面那一个位置;
偶数:将后面的直接删除。

函数的运用

需要运用的函数:
void Action(LinkNode*& list, int min, int n)
{
   
	LinkNode* p = new LinkNode;
	int i, count = 1;
	int temp;
	int k[MaxSize] = {
    0 };					       //将初始值赋值为0
	p = list->next;							       //因为不能 int k[n];

	for (i = 0; i < n; i++)					       //将最小值个数个赋值为1
	{
   
		k[i] = 1;
	}
	i = 0;
	while (p != NULL)						       //将第i个最小值出现的位置用k[i]表示
	{
   
		if (p->data == min)
		{
   
			k[i] = count;
			i++;
		}
		p = p->next;
		count++;
	}
														
	if (min % 2 == 1)						       //这个数是奇数的情况
	{
   
		printf("该最小数%d为奇数,将其与其后的数值进行互换\n", min);
		for (i = 0; i < n; i++)
		{
   
			ListDelete(list, k[i], temp);
			ListInsert(list, k[i] + 1, min);
		}
	}
	else                                           //这个数是偶数的情况	
	{
   											
		printf("该最小数%d为偶数,将其后的数值删除\n", min);
		for (i = 0; i < n; i++)
		{
   
			ListDelete(list, k[i] + 1, temp);
		}
	}
}
主函数
int main()
{
   
	srand((unsigned int)time(NULL));			   //随机数
	int i;										   //用来计数
	int min;									   //最小值的值
	int count = 0;								   //标记最小值出现的次数
	LinkNode* list;								   //初始化
	InitList(list);
	int temp;									   //中间变量
	GetElem(list, 1, temp);

	//随机数
	ElemType a[MaxSize] &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值