创建一个双向链表或双向循环链表

#include <stdio.h>
#include <stdlib.h>
#define len sizeof(struct list)
struct list
{
	int x;
	struct list *pre,*next;
};
struct list * create()//创建链表并返回链表头的指针
{
	struct list *p,*p1,*head;
	head=p=(struct list *)malloc(len);
	p->pre=NULL;//1.第一个元素没有直接前驱
	scanf("%d",&p->x);
	int n=0;
	while(p->x!=-1)
	{
		if(n==0)
			n++;
		else//搞清楚就很明白看清。建议在纸上画画
			p1->next=p,p->pre=p1;
		p1=p;
		p=(struct list *)malloc(len);
		scanf("%d",&p->x);
	}
	p1->next=NULL;//2.最后一个元素没有直接后继
//	p1->next=head,head->pre=p1; //如果1 2 行代码删除 这样写 就是双向循环链表了吧 哈哈
	return head;
}
int main()
{
	struct list *l1;
	printf("请输入链表A,以-1结束:");
	l1=create();
	printf("\n");
	while(l1!=NULL)
	{
		printf("%d ",l1->x);
		l1=l1->next;
		if(l1!=NULL)
		printf("%d ",l1->pre->x);
	}
	printf("\n");
	return 0;
}


 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
遗传算法选址问题是一种使用遗传算法来求解的问题。在Python中,可以使用geatpy库来进行遗传算法的实现。首先,我们需要自定义问题类来描述选址问题的特征和限制条件。然后,编写执行脚本调用geatpy进化算法模板对问题进行求解。 在geatpy库中,可以使用交叉操作来实现个体的交换和组合。交叉操作是遗传算法中的一个重要步骤,通过将两个父代个体的染色体进行配对交换,产生新的子代个体。 具体的步骤如下: 1. 首先,定义选址问题的目标函数和约束条件。目标函数可以是优化问题中需要最小化或最大化的指标,而约束条件则是限制解的可行性的条件。 2. 接下来,根据选址问题的特征和限制条件,创建一个自定义的问题类,继承自geatpy库中的Problem基类。 3. 在问题类中,需要定义目标函数和约束条件的计算方法,以及决策变量的取值范围等信息。 4. 然后,编写执行脚本,调用geatpy进化算法模板对问题进行求解。在执行脚本中,需要创建问题实例,并设置算法参数,例如种群大小、迭代次数等。 5. 最后,运行执行脚本,观察算法的收敛情况和最优解的结果。根据实际情况,可以调整算法参数或修改问题类以改进算法的性能。 总结起来,遗传算法选址问题的求解步骤包括目标函数和约束条件的定义、问题类的创建和算法模板的调用。通过这些步骤,可以使用geatpy库来实现遗传算法解决选址问题的求解过程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值