动态数据结构----链表

无头结点链表

可以应用在管理系统里

#include<stdio.h>
#include<stdlib.h>    //引用malloc()函数
//结点结构体
struct Node
{
  int a;//数据成员
  struct Node *pNext;//指针,struct Node是类型
};//不要忘了分号
//头尾指针初始化
struct Node* pHead=NULL;//全局变量
struct Node*pEnd=NULL;//全局变量
//创建链表或在链表中增加一个数据,尾插法[队列]
void AddListTail(int a)
{
//创立结点
  struct Node*pTemp=(struct Node*)malloc(sizeof(struct Node));
//结点数据赋值
  pTemp->a=a;
  pTemp->pNext=NULL;
//链接,分情况链表为空表和链表不为空表
if(NULL=pHead||NULL==pEnd)
{
  pHead=pTemp;
  pEnd=pTemp;
}
else
{
  pEnd->pNext=pTemp;
  pEnd=pTemp;

}
}
//创建链表或在链表中增加一个数据,头插法[栈]
void AddListHead(int a)
{
  struct Node*pTemp=(struct Node*)malloc(sizeof(struct Node));
  pTemp->a=a;
  pTemp->pNext=NULL;
if(NULL=pHead||NULL==pEnd)
{
  pHead=pTemp;
  pEnd=pTemp;
}
else
{
  pTemp->pNext=pHead;
  pHead=pTemp;
  
int main (void)
{
  pHead;
  AddListTail(5);//尾插法调用函数
  AddListHesd(2);//头插法调用函数
  struct Node *pT=SelectNode(int a);
  {
    if(pT!=NULL)
    {
      printf("%d\n",pT->a);
    }
    else
    {
      printf("没找到\n");
    }
  }
  system("pause");
  return 0;
}
//遍历链表
void Scanlist()
{
  struct Node *pTemp=pHead;
  while(pTemp!=NULL)
  {
    printf("%d\n",pTemp->a);
    pTemp=pTemp->pNext;
  }
}
//查询指定结点
struct Node *SelectNode(int a)
{
  struct Node *pTemp=pHead;
  while(pTemp!=NULL)
  {
    if(a==pTemp->a)
    {
      return pTemp;
    }
    return NULL;
  }  
}
//链表清空
void FreeList()
{
  struct Node *pTemp=pHead;
  while(pTemp!=NULL)
  {
    struct Node *pT=pTemp;//用pT记住pTemp,记录头,防止头被修改,丢内存
    pTemp=pTemp->Next;
    free(pT);
  }
  //头尾清空,方便下次创建链表
  pHead=NULL;
  PEnd=NULL;
}
//指定位置插入结点
void AddListRand(int index,int a)
{
  if(pHead==NULL||pEnd==NULL)//判断链表是否为空
  {
    printf("链表没有结点\n");
    return 0;
  }
  //找位置
  struct Node *pT=SelectNode(int index);
  if(pT==NULL)
  {
    printf("没有指定结点\n");
    return 0;
  }
  //有指定结点,创建结点
  struct Node*pTemp=(struct Node*)malloc(sizeof(struct Node));
  pTemp->a=a;
  pTemp->pNext=NULL;
  //链接
  if(pT==pEnd)
  {
    pEnd->Next=pTemp;
    pEnd=pTemp;
  }
  else
  {
    pTemp->Next=pT->Next;
    pT->Next=pTemp;
  }
}
//头删除
void DeleteListHead()
{
  if(pHead==NULL||pEnd==NULL)//判断链表是否为空
  {
    printf("链表为空\n");
    return 0;
  }
  struct Node *pT=pHead;//用pT指向要删除的结点
  pHead=pHead->Next;//令头指针指向要删除结点的下一个结点
  
}
//尾删除
void DeleteListTail()
{
  if(pHead==NULL||pEnd==NULL)//判断链表是否为空
  {
    printf("链表为空\n");
    return 0;
  }
  //链表不为空
  if(pHead=pEnd)//只有一个结点
  {
    free(pHead);
    pHead==NULL;
    pEnd==NULL;
  }
  else
  {
  //找尾结点前一结点
    struct Node *pTemp=pHead;
    while(pTemp->Next!=pEnd)
    {
      pTemp=pTemp->Next;
    }
  //最终会找到尾结点前一结点
  //删除尾结点
    free(pEnd);
    //迁移尾指针
    pEnd=pTemp;
    //尾结点的指针域赋值NULL
    pEnd->Next=NULL; 
  } 
}
//删除指定结点
void DeleteListRand(int a)
{
   if(pHead==NULL||pEnd==NULL)//判断链表是否为空
  {
    printf("链表为空\n");
    return 0;
  }
  //找要删除的结点
  struct Node*pTemp=SelectNode(a);
  if(pTemp==NULL)
  {
    printf("查无此结点\n");
    return 0;
  }
  //查到结点
  //一个结点
  if(pHead==pEnd)
  {
    free(pHead);
    pHead==NULL;
    pEnd==NULL;
  }
  //有两个结点
  else if(pHead->Next==pEnd)
  {
    if(pTemd==pHead)
    {
      DeleteListHead();
    }
    else
    {
      DeleteListTail();
    }
  }
  //有多个结点
  else
  {
    if(pTemd==pHead)
    {
      DeleteListHead();
    }
    else if(pTemp==pEnd)
    {
      DeleteListTail();
    }
    else
    {
    //找要删除的结点的上一个结点
      struct Node *pT=pHead;
      while(pT->Next!=pTemp)
      {
        pT=pT->Next;
      }
     //链接
      pT->Next=pTemp->Next;
     //释放结点
      free(pTemp)}
  }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值