typedef struct _tagStudentInfo
{
int ID;
char * name;
int tel;
}StudentInfo,*stu;
typedef struct linknode
{
int number;
struct linknode *pNext;
}linknode,*nodetype;
#include <stdio.h>
#include <stdlib.h>
#include "test.h"
//////////////////////////////////////////////////////////////////////////////////////
/*
目前测试,结点的结构体只放了个number
*/
//////////////////////////////////////////////////////////////////////////////////////
/*插入排序主例程*/
nodetype OrderList(nodetype pHead)
{
nodetype guard,pChoosedNode,pPreChoosedNode; /*pChoosedNode用来指向需要插入的结点,pPreChoosedNode用来指向pChoosedNode的前一个结点*/
//for(pPreChoosedNode=pHead,pChoosedNode=pHead->pNext;pChoosedNode!=NULL;)
pPreChoosedNode=pHead,pChoosedNode=pHead->pNext;
while(NULL!=pChoosedNode)
{
guard=pHead; /*guard用来遍历寻找合适的插入位置*/
//for(;guard!=pChoosedNode;guard=guard->pNext)
while(guard!=pChoosedNode)
{
if(guard->pNext->number > pChoosedNode->number)/*如果找到,即把pChoosedNode所指向的结点插到guard后面,然后跳出循环*/
{
pPreChoosedNode->pNext=pChoosedNode->pNext;
pChoosedNode->pNext=guard->pNext;
guard->pNext=pChoosedNode;
pChoosedNode=pPreChoosedNode->pNext;
break; /*别忘了此处的break*/
}
guard=guard->pNext;
}
if(guard==pChoosedNode)/*此处需要注意,只在pChoosedNode所指结点不需要前插时,移动pChoosedNode和pPreChoosedNode*/
{
pChoosedNode=pChoosedNode->pNext;
pPreChoosedNode=pPreChoosedNode->pNext;
}
}
return pHead;
}
// OK 创建单链表
nodetype CreateList()
{
//声明指针变量pHead,用于保存头结点指针
nodetype pHead;
//分配头结点内存,并将返回指针赋给pHead
pHead = malloc(sizeof *pHead);
//将pHead->data.id置为-1
//将pHead的next置为NULL
pHead->pNext = NULL;
return pHead;
}
// OK 输出整个单链表的内容,pHead为头结点指针
void Printlist(nodetype pHead)
{
//声明一个指针变量Node,用于保存链表的当前结点
nodetype pNode;
//将pNode赋值为输入参数pHead->pNext
pNode = pHead->pNext;
//循环读取pNode->data字段的值,知道pNode为空指针
while(pNode)
{
printf("The number is %d\n",pNode->number);
//将pNode赋值为pNode->pNext
pNode = pNode->pNext;
}
}
// OK 计算单链表的长度,pHead为头结点指针
int GetListLen(nodetype pHead)
{
//声明一个整形变量i,用于保存链表长度
int i = 0;
//声明一个指针变量pNode,用于保存链表的当前结点
nodetype pNode = NULL;
//将pNode赋值为输入参数pHead
pNode = pHead;
//循环读取pNode,直到pNode为空指针
while(pNode)
{
i = i + 1;
pNode = pNode->pNext;
}
return i;
}
// OK 查找学生ID为stuID的结点,pHead为头结点指针,stuID为学生ID
nodetype FindNodeByStuID(nodetype pHead,int stuID)
{
//声明一个指针变量pNode,用于保存链表的当前结点
nodetype pNode = pHead;
//循环读取pNode->data中,iID字段的值,直到pNode为空指针
while(pNode)
{
//如果pNode->data.ID等于 i
if(pNode->number==stuID)
{
//则推出循环;
break;
}
//将pNode赋值为pNode->pNext;
pNode = pNode->pNext;
}
//返回pNode
return pNode;
}
//在制定的学生ID结点后插入一个结点,pHead为头结点指针,iStuID为学生ID,pStudentInfo为结点值指针
// OK nodetype InsertNode(nodetype pHead,int iStudID,StudentInfo * pStudentInfo)
nodetype InsertNode(nodetype pHead,int iStudID)
{
//声明两个指针变量pNode,pNewNode,分别用于保存当前结点和新分配的结点指针
nodetype pNode = NULL;
nodetype pNewNode = malloc(sizeof *pNewNode);
pNewNode->pNext = malloc(sizeof *(pNewNode->pNext));
//找到值为iStudID的结点指针,并保存到pNode
pNode = FindNodeByStuID(pHead,iStudID);
//将pNode->pNext赋值为pNewNode,感觉有问题
//pNewNode = pNode->pNext;
pNewNode->pNext = pNode->pNext;
pNode->pNext = pNewNode;
pNewNode->number = 2010;
//将pNewNode->pNext赋值为空,感觉有问题
// pNewNode->pNext = NULL;
//将pStudentInfo赋值给pNewNode的data域
//返回pHead
return pHead;
}
//在量表尾部插入一个结点,pHead为头结点指针,pStudentInfo为节点值指针
/*单链表插入排序的测试例程*/
int main(void)
{
/*构造一个包含头节点的单链表*/
nodetype head = malloc(sizeof *head);
nodetype p = head;
nodetype test = NULL;
int i=0;
//int result = 0;
while(i<6)
{
p->pNext = malloc(sizeof *head);
p = p->pNext;
p->number = rand()%100;
printf("%d",p->number);
p->pNext = NULL;
i++;
}
printf("\n");
//Printlist(head);
//CreateList();
//result = GetListLen(head);
//printf("result ========= %d\n",result);
//test = FindNodeByStuID(head,34);
test = InsertNode(head,34);
/*插入排序*/
// OrderList(head);
/*输出排序后的链表*/
p=head->pNext;
while(p!=NULL)
{
printf("%d ",p->number);
p=p->pNext;
}
/*释放内存*/
while(head)
{
p=head;
head=head->pNext;
free(p);
}
return 0;
}
分享到:
相关推荐
通过这篇文章,我们可以了解到车辆跟踪项目的调试过程和技术细节,并且可以学习到 Python 环境配置、代码调试和项目结构的知识点。此外,我们也可以了解到 YOLOv5 和 DeepSort 算法的应用和前景。
通过实践这个项目,不仅可以掌握YOLOv10和DeepSORT的工作原理,还能了解到目标检测与跟踪算法在实际项目中的整合过程。 总的来说,这个"移动跟踪-基于YOLOv10+DeepSort实现视频中移动目标跟踪算法"项目是学习和提升...
毕业设计-基于yolov5+deepsort实现高速移动车流人流量统计项目实战源码.zip个人经导师指导并认可通过的98分毕业设计项目,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者。也可作为课程设计、...
目标跟踪算法-使用yolov8+deepsort开发的多目标跟踪算法项目源码.zip个人经导师指导并认可通过的98分毕业设计项目,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者。也可作为课程设计、期末大...
目标跟踪和YOLOv8-DeepSORT智能车辆跟踪计数系统的实现是一个综合性的计算机视觉任务,涉及了...通过实际操作,学习者不仅可以掌握理论知识,还能锻炼解决问题和调试代码的能力,为未来的研究和开发工作打下坚实基础。
基于YOLOv5+deepsort算法实现车辆检测测速系统完整源码(附项目说明文档+系统设计文档)个人经导师指导并认可通过的高分毕业设计项目,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者。...
“CSort内排序算法”项目提供这些排序算法的C++实现,学习者可以通过阅读代码了解每种排序算法的逻辑,并通过实际运行和调试加深理解。同时,这也可以作为进一步研究和优化排序算法的基础,例如,如何减少快速排序的...
在"C语言实训大全全部调试通过"这个项目中,我们看到一系列C语言编写的实训程序,它们已经过完整的测试和调试,确保能够正确运行。这些源代码涵盖了多种实用的编程任务,包括计算总成绩、成绩排名、平均分以及密码...
DeepSORT的核心是计算目标的相似度,通过多目标跟踪(MOT)算法实现连续帧间的对象匹配。卡尔曼滤波器用于预测目标的状态,而匈牙利算法则用于解决数据关联问题,确保每个目标都能正确地与历史轨迹对齐。 在这个...
综上所述,这个项目结合了先进的YOLOv5目标检测、DeepSORT多目标跟踪算法,并通过可视化展示目标运动轨迹,提供了一个强大的无人机监控解决方案。在实际操作中,这样的系统可以帮助用户实时监控和分析无人机捕获的...
这种可视化工具对于教育和调试排序算法非常有用。 总之,"mfc-sort.zip"项目提供了一个实用的工具,它将理论知识与实践结合,帮助开发者和学习者更好地理解和掌握排序算法。通过源代码和演示,我们可以深入了解MFC...
- 查看和分析内存页分配时的调用栈信息,可以通过读取/sys/kernel/debug/page_owner文件,然后使用page_owner_sort工具进行排序和过滤,以得到清晰的调用栈跟踪信息。 值得注意的是,虽然page_owner功能非常有用,...
该项目是个人毕设项目,答辩评审分达到95分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。 该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,...
在Visual Studio 2008这样的IDE中,我们可以方便地调试和测试代码,确保Merge Sort的正确性。通过理解并实践这种排序算法,我们可以更好地掌握分治法和算法设计,这对于理解和编写更复杂的程序至关重要。
PyTorch是一个流行的深度学习框架,它具有易用性和灵活性,使得开发和调试这样的系统变得简单。项目中通常包括以下文件: 1. **模型代码**:包含YOLOv5和DeepSORT的网络结构定义和训练/推理逻辑。 2. **数据处理**...
目标跟踪+YOLOv8-deepsort 实现智能车辆跟踪+计数系统源码(高分项目).zip 该项目是个人高分毕业设计项目源码,已获导师指导认可通过,都经过严格调试,确保可以运行!放心下载使用。 目标跟踪+YOLOv8-deepsort ...
### GDK调试方法详解 ...以上是关于GDB调试的基本方法和技术细节,通过这些命令,我们可以有效地进行程序调试,发现并解决问题。当然,除了上述命令之外,GDB还有许多高级功能等待开发者去探索和利用。
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用!...deepsort结合yolov5测试现实中小车经过的时间和速度,判断是不是存在超速行为,并将结果通过rabbitmq输出(python源码+项目说明).zip
开发者可以使用Visual Studio的集成开发环境来编写、编译和调试MPI程序。配置好MPI库后,可以创建一个新的C或C++项目,并添加相关头文件和库链接,以便使用MPI函数。 总之,MPI并行桶排序是利用并行计算能力解决...