基础学习第二弹

关键算法和数据结构

单链表

  1. 线性表:逻辑上相邻,物理上也相邻。
  2. 单链表:
    数据域+指针域
    如要操作链表,需要声明额外的指针。

单链表的创建算法

定义一个链表结点
typedef struct node
{
    int num;
    struct node *next;
}stud;
算法如下:
#include <malloc.h>
typedef struct node
{
    int num;                 //数据域
    struct node *next;       //指针域
}stud;

stud * create(int n)         //创建n个结点
{   
    stud *head,*p1,*p2;     //p1指向新结点,p2指向当前结点
    head=p1=p2=NULL;
    for(int =0;i<n;i++)
    {
        p1=(stud *)malloc(sizeof(stud)); //创建新结点
        p1->num=i;
        if(i==0)
            head=p1;
        else
            {
            p2->next=p1;
            }
        p2=p1;
    }
    p2->next=NULL;                 //最后一个节点指向NULL
    return head;
}

单链表的查找算法

外部传入一个head指针
typedef struct node
{
    int num;
    struct node *next;
}stud;

stud * find(stud *head,int i)
{
    stud *p1;  //遍历的指针
    p1=head;
    while(p1!=NULL) //链表非空
    {
        if(i==p1->num)
            break;
        else
            {
            p1=p1->next;
            if(p1==NULL)
                {
                printf("cannot find!\n");
                return NULL;
                }
            }
    }

    return p1;
}

单链表的删除算法

与查找思路差不多,但要注意head结点和找不到删除节点的情况
bool del(stud *head,int i)  //删除成功返回true,失败或未找到返回false
{
    bool bret=false;
    if(head)
    {
        stud *p1,*p2;
        p1=head;
        while(p1->num!=i&&p1->next!=NULL)
        {
            p2=p1;
            p1=p1->next;
        }   
        if(p1)
        {
            if(p1==head)      //head结点情况处理方式不同
                head=p1->next;
            else
                p2->next=p1->next;
            bret=ture;
            free(p1);
        }
    }
    return bret;
}

单链表的插入算法

前提链表有序
stud *insert(stud *head ,stud *p)
{
    stud *p1,*p2;
    p1=head;
    if(!head)
    {
        head=p;
        head->next=NULL;
    }
    else
    {
        while(p->num > p1->num && p1->next!=NULL)
        {
            p2=p1;
            p1=p1->next;
        }
        if(p1==head)          //注意点
        {
            head=p;
            p->next=p1;
        }
        else
        {
        p2->next=p;
        p->next=p1;
        }
    }
}

待续。。。

利用 TensorFlow 训练自己的目标识别器。本文内容来自于我的毕业设计,基于 TensorFlow 1.15.0,其他 TensorFlow 版本运行可能存在问题。.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值