2020-10-20 //线性表2.19

本文介绍了一个使用C++实现的双向链表的基本操作案例,包括初始化、输入、删除特定范围内的元素及输出等核心功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线性表题 2.19

#include<iostream>
using namespace std;
#define ElemType double
typedef struct LNode
{
    ElemType data;
    struct LNode* next,*prior;
}LNode,*Link;

typedef struct
{
    Link head,tail;
    int length;
}LinkList;

bool Init_LinkList(LinkList& L)//初始化双向链表L
{
    L.head=new LNode;
    if(!L.head)
        return false;
    L.head->next=L.head->prior=nullptr;
    L.tail=L.head;
    L.length=0;
    return true;
}

bool Input_LinkList(LinkList& L)//尾插法输入数据
{
    cout<<"输入数据 非double停止\n";
    ElemType num;
    Link p;
    while(cin>>num){
        p=new LNode;
        if(!p)
            return false;
        p->data=num;
        p->next=L.tail->next;
        p->prior=L.tail;
        L.tail->next=p;
        L.tail=p;
        L.length++;
    }
    if(!cin){//改变cin的输入状态,以免影响后续的cin使用
        cin.clear();
        while(cin.get()!='\n')
            continue;
    }
    cout<<"输入完成\n";
    return true;
}

bool DeleteArrangeElem_LinkList(LinkList& L,ElemType mink,ElemType maxk)//删除大于mink、小于maxk的数据
{
    if(mink>maxk){
        cout<<"给的值不合理\n";
        return false;
    }
    Link p,q;
    p=L.head->next;
    while(p&&p->data<=mink)
        p=p->next;
    if(!p)//p==nullptr 说明数据全部小于mink,没有要删除的
        return true;
    q=p;//q从p开始
    while(q&&q->data<maxk)
        q=q->next;
    if(!q){//q==nullptr 说明 从p开始到最后 的这些数据全部小于maxk,这样会影响到尾指针,需重置尾指针
        p->prior->next=nullptr;
        L.tail=p->prior;
    }
    else p->prior->next=q;//正常情况,不需要重置尾指针
    Link p1;
    while(p!=q){//删除p(包括p)到q的前驱指针(不包括q) 指向的数据
        p1=p;
        p=p->next;
        delete p1;
        L.length--;
    }
    return true;
}

void Output_LinkList(LinkList L)//输出链表数据
{
    cout<<"----"<<endl;
    cout<<"链表长度:"<<L.length<<endl;
    Link p=L.head->next;
    while(p){
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl;
    cout<<"----"<<endl;
}

int main()
{
    LinkList L;
    Init_LinkList(L);
    Input_LinkList(L);
    Output_LinkList(L);
    ElemType a,b;
    cin>>a>>b;
    DeleteArrangeElem_LinkList(L,a,b);
    Output_LinkList(L);
    return 0;
}

输入数据 非double停止
1.1
2.2
3.3
4.4
5.5
@
输入完成
----
链表长度:5
1.1 2.2 3.3 4.4 5.5
----
1 6
----
链表长度:0

----

Process returned 0 (0x0)   execution time : 5.803 s
Press any key to continue.


内容概要:本文档详细介绍了基于MATLAB实现多目标差分进化(MODE)算法进行无人机三维路径规划的项目实例。项目旨在提升无人机在复杂三维环境中路径规划的精度、实时性、多目标协调处理能力、障碍物避让能力和路径平滑性。通过引入多目标差分进化算法,项目解决了传统路径规划算法在动态环境和多目标优化中的不足,实现了路径长度、飞行安全距离、能耗等多个目标的协调优化。文档涵盖了环境建模、路径编码、多目标优化策略、障碍物检测与避让、路径平滑处理等关键技术模块,并提供了部分MATLAB代码示例。 适合人群:具备一定编程基础,对无人机路径规划和多目标优化算法感兴趣的科研人员、工程师和研究生。 使用场景及目标:①适用于无人机在军事侦察、环境监测、灾害救援、物流运输、城市管理等领域的三维路径规划;②通过多目标差分进化算法,优化路径长度、飞行安全距离、能耗等多目标,提升无人机任务执行效率和安全性;③解决动态环境变化、实时路径调整和复杂障碍物避让等问题。 其他说明:项目采用模块化设计,便于集成不同的优化目标和动态环境因素,支持后续算法升级与功能扩展。通过系统实现和仿真实验验证,项目不仅提升了理论研究的实用价值,还为无人机智能自主飞行提供了技术基础。文档提供了详细的代码示例,有助于读者深入理解和实践该项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值