02-1. Reversing Linked List (25)

本文介绍了一种不使用排序方法解决特定链表遍历问题的思路与实现过程,通过重新组织节点来达到目标输出格式,适用于节点数量不大于10万的情况。

忙活了将近整整一天,终于把这个题给搞定了,因为没有用到链表的功能,也没有因为提示说不能先排序,排序必挂而放弃尝试,最终走了无数的弯路,还是给解决了。。

#include <stdio.h>

typedef struct{
	int curAdd;
	int seqNum;
	int nextAdd;
	}Node;

int main()
{	
	int startAdd;
	int N, K;
	scanf("%d %d %d", &startAdd, &N, &K);
	Node a[100000];
	int curAddI, seqNumI, nextAddI;
	for(int i=0; i<N; i++)
	{
		scanf("%d %d %d", &curAddI, &seqNumI, &nextAddI);
		a[i].curAdd = curAddI;
		a[i].seqNum = seqNumI;
		a[i].nextAdd = nextAddI;
	}
	
	int j = 0;		//j is the order of the array from 0 to N-1.
	Node temp;
	int curNum = 0;
	int effectNode = 0;
	int s;
	while(startAdd != -1)
	{
		if(startAdd != a[j].curAdd)
		{
			j++;
		}
		else
		{
			effectNode++;
			//printf("effectNode = %d\n", effectNode);
			startAdd = a[j].nextAdd;
			temp = a[j];
			for(s=j-1;s>=curNum;s--)
			{
				a[s+1] = a[s];
			}
			a[curNum] = temp;
			curNum++;
			j = curNum;			
		}		
	}
	/*for(int nn=0; nn<effectNode; nn++)
	{
		if(a[nn].nextAdd == -1)
		printf("%05d %d %d\n",a[nn].curAdd, a[nn].seqNum, -1);
		else
		printf("%05d %d %05d\n",a[nn].curAdd, a[nn].seqNum, a[nn].nextAdd);
	}*/
	int value = K;
	int count = 0;
	int m = K-1;		//m+1 is the output number in one round.
	int total = effectNode;
	
	if(effectNode < K)
	{
		for(int mm = 0; mm<effectNode-1; mm++)
		{
			printf("%05d %d %05d\n", a[mm].curAdd, a[mm].seqNum, a[mm+1].curAdd);
		}
		printf("%05d %d %d\n",a[effectNode-1].curAdd, a[effectNode-1].seqNum, -1);
		return 0;
	}
	else if(effectNode == K)
		{
			for(; m>0; m--)
			{
				printf("%05d %d %05d\n", a[m].curAdd, a[m].seqNum, a[m-1].curAdd);				
			}
			printf("%05d %d %d\n", a[0].curAdd, a[0].seqNum, -1);
			return 0;
		}	
	else
	{
		while(effectNode>=value)
		{					
			if(total%K == 0)
			{
				for(; m>=0; m--)
				{
					if((m != 0))
					{
						printf("%05d %d %05d\n", a[m+count].curAdd, a[m+count].seqNum, a[m+count-1].curAdd);
					}
					else if((m == 0) && (count == (total-value)))
					{
						printf("%05d %d %d\n",a[m+count].curAdd, a[m+count].seqNum, -1);
						return 0;
					}					
					else 
					{
						printf("%05d %d %05d\n", a[m+count].curAdd, a[m+count].seqNum, a[count+2*value-1].curAdd);
					}				
				}
				m = K-1;
				effectNode -=value;
				count +=value;
			}
			else
			{
				for(; m>=0; m--)
				{
					if(m != 0)
					{
						printf("%05d %d %05d\n", a[m+count].curAdd, a[m+count].seqNum, a[m+count-1].curAdd);
					}
					else if((m == 0) && ((total-count)>2*value))
					{
						printf("%05d %d %05d\n", a[m+count].curAdd, a[m+count].seqNum, a[count+2*value-1].curAdd);
					}
					else 
					{
						printf("%05d %d %05d\n", a[m+count].curAdd, a[m+count].seqNum, a[count+value].curAdd);
					}
				}
				m = K-1;
				effectNode -=value;
				count +=value;
			}
		}				
		for(;count<total-1;count++)
		{		
				printf("%05d %d %05d\n",a[count].curAdd, a[count].seqNum, a[count+1].curAdd);
		}
		printf("%05d %d %d\n",a[total-1].curAdd, a[total-1].seqNum, -1);
	}
	return 0;
}
	


需求响应动态冰蓄冷系统与需求响应策略的优化研究(Matlab代码实现)内容概要:本文围绕需求响应动态冰蓄冷系统及其优化策略展开研究,结合Matlab代码实现,探讨了在电力需求侧管理背景下,冰蓄冷系统如何通过优化运行策略参与需求响应,以实现削峰填谷、降低用电成本和提升能源利用效率的目标。研究内容包括系统建模、负荷预测、优化算法设计(如智能优化算法)以及多场景仿真验证,重点分析不同需求响应机制下系统的经济性和运行特性,并通过Matlab编程实现模型求解与结果可视化,为实际工程应用提供理论支持和技术路径。; 适合人群:具备一定电力系统、能源工程或自动化背景的研究生、科研人员及从事综合能源系统优化工作的工程师;熟悉Matlab编程且对需求响应、储能优化等领域感兴趣的技术人员。; 使用场景及目标:①用于高校科研中关于冰蓄冷系统与需求响应协同优化的课题研究;②支撑企业开展楼宇能源管理系统、智慧园区调度平台的设计与仿真;③为政策制定者评估需求响应措施的有效性提供量化分析工具。; 阅读建议:建议读者结合文中Matlab代码逐段理解模型构建与算法实现过程,重点关注目标函数设定、约束条件处理及优化结果分析部分,同时可拓展应用其他智能算法进行对比实验,加深对系统优化机制的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值