DataStructure---LinkList 链表C语言实现代码

CocosCreator | 自定义启动页之H5 01 效果对比 默认启动页: 自定义启动页: 02 启动页存在的意义 我们在 creator 中的开发的游戏都是基于 cocos engine,所以在展示我们的游戏之前,是必须要先加载 cocos engine,然后才是我们自己的业务代码 流程图如下: 而构建完成后未精简的 cocos engine 代码为 1.9M 如果再加上物理相关代码的话,一共是2M 别忘了,我们自己的首场景也要加载过程哦 所以,从游戏启动,到真... 阅读详情

//=============================================================
//链表具体函数实现部分
//=============================================================
#include "LinkList.h"
#include <malloc.h>
#include "stdafx.h"

void main()
{
 //TODO:Just a main to avoid the error
}

//分配一个p指向的值为e的节点,并返回OK;如果分配失败,则error
Status MakeNode( Link &p, ElemType e){
   p = ( Link)malloc(sizeof(LNode));
   if( !p) return ERROR;
    p->data = e;
 p->next = NULL;
     return OK;
}//The end of MakeNode

//释放p指向的节点
Status FreeLNode( Link &p){
 if( !p) return ERROR;//Space does not exist
 free( &p);
 return OK;
}//end of FreeLNode


//初始化一个已经声明链表L
Status InitList( LinkList &L){
 L.head = L.tail = NULL;
    L.len = 0;
 return OK;
}

//销毁一个链表L
Status DestroyList( LinkList &L){
 if( L.len != 0){//if the link list is not empty
  Link p = L.head, q = NULL;
  for( ; L.len >=0 && p->next != NULL; --L.len){
   q = p->next;
   L.head = q;
   free( &p);
            p = q; 
  }
  L.head = L.tail = NULL;
  L.len = 0;
  free( &p);
  free( p);
  free( q);
  free( &L);
 }//end of if
 else{//if the link list is empty 
        L.head = L.tail = NULL;
  L.len = 0;
  free( &L);
 }
 return OK;
}//end of DestroyList

//将当前链表L清空,变成一个初始状态的链表
Status ClearList( LinkList &L){
  if( L.len != 0){//if the link list is not empty
  Link p = L.head, q = NULL;
  for( ; L.len >=0 && p->next != NULL; --L.len){
   q = p->next;
   L.head = q;
   free( &p);
            p = q; 
  }
  L.head = L.tail = NULL;
  L.len = 0;
  free( &p);
  free( p);
  free( q);
 }//end of if
  else{//if the link list is empty 
        L.head = L.tail = NULL;
  L.len = 0;
 }//end of else
  return OK;
}

//在头节点位置插入一个新的节点,h指向头,s指向新的节点
Status InsFirst( LinkList &L, Link s){
 if( !s) return ERROR;
 s->next = L.head;
 L.head = s;
 return OK;
}

//将头节点删除
Status DelFirst( LinkList &L, Link &q){
 if( !L.head) return ERROR;
 q = L.head;
 L.head = q->next;
 return OK;
}

//向链表内插入数据,s以后的一个或若干个节点插入链表的尾部
//并修改链表的tail指针
Status Append( LinkList &L, Link s){
 if( !s) return ERROR;//no node at s
 L.tail->next = s;
 while( s->next){//find the new end at the end of list pointed by s
  s = s->next;
 }
 L.tail = s;
 return OK;
}

//删除链表尾节点元素,由q返回
Status Remove( LinkList &L, Link &q){
 if( L.len == 0) return ERROR;//the list is empty
 Link p = L.head;//a temp pointer used to find the
                 //node before the tail
 while( p->next != L.tail)
  p = p->next;//till find the node before the tail
    q = p->next;
    L.tail = p;
 return OK;
}//end of Remove

//将元素插入由p指定的位置的前一个位置,并修改p指向新的节点
Status InsBefore( LinkList &L, Link &p, Link s){
 Link q = L.head;//临时指针游标,辅助搜寻指向p的前一个节点
 while( q->next != p)
  q = q->next;
 //一下三步将s的node插入p的前一个位置,即q的位置
 s->next = p;
 q->next = s;
 p = s;
 return OK;
}//end of InsBefore

//将元素插入由p指定位置的下一个位置,并修改p指向新节点
Status InsAfter( LinkList &L, Link &p, Link s){
 if( !s) return ERROR;//节点指针s无效
 //插入节点s
 s->next = p->next;
 p->next = s;
 p = s;
 return OK;
}//end of InsAfter

//修改当前指针p指向的元素的数据域的值为e
Status SetCurElm( Link &p, ElemType e){
 if( !p) return ERROR;//当前p指针无效
 p->data = e;
 return OK;
}//end of SetCurElm

//获取当前指针p指向的元素的数据域的值,以e返回
Status GetCurElm( Link &p, ElemType &e){
 if( !p) return ERROR;//当前指针p无效
 e = p->data;
    return OK;
}//end of GetCurElm

//判断当前链表是否空表,以true和false返回结果
Status IsEmpty( LinkList L){
 if( L.len == 0) return TRUE;//如果空,则链表长度为0
  else return FALSE;
}//end of IsEmpty

//返回链表当中头节点的位置
Position Get_L_Head( LinkList L){
  return L.head;
}

//返回链表当中最后一个节点的位置
Position GetLast( LinkList L){
 return L.tail;
}

//由当前p指向的位置,查找p的邻接前一个节点的位置
Position PriorPos( LinkList L, Link p){
 Link q = L.head;//声明一个临时的指针,用于遍历并定位于p的前躯
 while( q->next != p)
  q = q->next;
 return q;
}

//由当前p指向的位置,查找p的下一个邻接元素的位置
Position NextPos( Link p){
 return p->next;
}

//获取当前链表内第i个元素的位置,如果i不存在,则ERROR
Status LocatePos( LinkList L, Link &p, int i){
   p = L.head;
   int k = 1;//链表的位置是从1开始计算
   while( p->next != NULL || k <= i){
    p = p->next;
    ++k;
   }
   if( p->next == NULL && k < i) return ERROR;//如果计数器未及制定位置
                                              //却已经到了尾部,则不存在指定节点
   else return OK;
}

//查找当前链表当中与给定内容e相符的第一个元素的位置,找不到则返回Error
Status  LocateElem( LinkList L, ElemType e, Status ( *compare)( ElemType ,ElemType)){
 return 0;//需要比较函数,不写了~~
}

//遍历整个链表,如果遍历失败,则返回falsh
Status ListTraverse( LinkList L, Status (*Visit)(LinkList)){
 return 0;//需要遍历函数,不写了~~~
}

嵌入式软件工程师面试题目整理(一) 文章目录嵌入式软件工程师面试题目整理(一)Arm有多少32位寄存器?Arm2440和6410有什么区别CPU,MPU,MCU,SOC,SOPC联系与差别上拉&下拉&高阻态串口协议讲一讲RS232和RS485通讯接口有什么区别IIC时序图画一下,IIC有哪些状态,给一个字节,将它发送出去。IIC有什么注意事项?有没有用I/O模拟IIC,如果有需要注意什么?为什么2440的内存起始地址是3后面7个0呢?为什么6410的内存起始地址是5后面7个0呢?内存管理有什么看法?(MMU)锁有哪些?有什么注 阅读详情

相关推荐

国外无人机蜂群作战典型战例及发展趋势

参与袭击的无人机为简易组装的固定翼飞机,采用小排量活塞发动机和手机GPS通信模块零件,机翼为轻木加泡沫板混合结构,尾梁为铝合金方管,主要依靠胶带粘接,以上全部配件均可在商用市场买到,成本较低,可在短时间内装配完成。③战场纵深短、瞬时性强。蜂群作战的参战数量显著增加,这一方面得益于无人机技术的飞速发展使得廉价无人机可以大量生产和仿制,另一方面凭借迅速发展的投放和回收技术以及集群控制技术,使得无人机蜂群可在极短时间内实现编队饱和攻击,在快速消耗敌方高价值防空武器系统的同时,保证己方物资系统的突防概率。

renhongxia1的博客 2479

链表基础知识详解(非常详细简单易懂)

数据结构链表详解,创建,遍历,释放,节点的查找,节点的删除,插入节点,链表排序等操作,非常详细

qq_61672347的博客 23万+

手搓ZLMediaKit实现拉流推流系列3(RK3588上YOLO系列拉流、MPP解码+编码、推流全流程)

 前段时间比较忙,一直没有时间补充后续的内容。今天终于抽出空来,立马进入码字环节:手搓ZLMediaKit实现拉流推流系列在本篇也终于迎来了完结篇,在本篇文章中,你将看到以下一整套完整流程:使用ZLMediaKit拉流---MPP解码---Yolo模型进行推理---MPP编码并推流。

m0_46303486的博客 2171

DataStructure---LinkedList,链表(定义部分)

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//                    Produced  By  fishstudio (R)  @  Aug, 2005//Description://    This is a ADT(Abstract D

Vincent--programming life 1943

夜间灯光遥感数据介绍及下载汇总

夜间灯光遥感数据介绍及下载汇总

qq_43874102的博客 1万+

科研党必备:Zotero+Deepseek 打造AI文献阅读助手(附详细插件配置指南)

本文详细介绍了如何利用Zotero和Deepseek打造AI文献阅读助手,提升科研效率。从Zotero基础安装到中文文献处理插件茉莉花的配置,再到Deepseek API的集成与模型选择策略,全面覆盖了AI辅助阅读的关键环节。特别适合需要高效管理海量文献的科研工作者,显著提升文献筛选和分析速度。

backprop5master的博客 422

数据结构(Data Structure)(第三集)(链表(Linked List))

之前一集所讨论的是顺序表,这一集主要讨论的是链表(Linked List)什么是链表?链表(Linked List) 事实上就是一系列结构体连接而成的列表每个结构体代表一个节点, 一个结构体可能包括至少: 普通数据类型的数据变量 (例子: int data) 一个可以指向下一个结构体的指针(A pointer that points to next structure) 链表还分为两种: 单链表(S

weixin_38293994的博客 629

【STK】手把手教你利用STK进行进行光电红外仿真02-STK/EOIR模块属性之一 传感器选项设置

EOIR传感器可以从空间几何属性、光谱属性、光学属性、辐射属性四个方面进行设置,并且可以设置信号传播路径中的大气特性,包括大气模型、气溶胶模型、气象学可见性和大气湿度。在定义EOIR传感器时,需要Sensor——Definition属性页中,将Sensor Type设置为EOIR。单击下面的按钮打开传感器的EOIR配置页,可以对传感器的属性进行配置,此外,还可以在场景中视情况添加相关的中心体。路径辐射损耗影响上述特性的计算,计算的结果考虑了传感器、目标位置的影响,但是还没考虑地球临边背景的影响。

weixin_44184852的博客 3199

链表基础知识总结

什么是链表 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点都包括两部分:一是数据域,用来存储元素数值数据,另一个是存储直接后继结点地址的指针域,该指针一般称为next,用来指向下一个结点的位置。由于下一个结点也是链表类型,所以next的指针也要定义为链表类型。 链表中的一些基本定义和特点 头指针:是指向链表中第一个结点的指针 首元结点:是指链表中存储的第一个数据元素的结

闲适_ 1万+

2025资源从哪里来!

研究网络通信中的安全问题,如VLAN划分、路由协议(静态、动态如OSPF、BGP)、NAT转换、AAA认证、访问控制列表(ACL)等。‌Wi-Fi安全设置‌、‌密码破解原理‌(仅用于合法测试或教育目的)、‌常见Web安全问题‌如SQL注入、XSS跨站脚本攻击等的防范措施。在这个网站你可以找到你对应的专业-对应的路线-对应的资源-对应的百度网盘里面全是免费的资源------------------惊喜不?‌防火墙配置与策略‌、‌入侵检测与防御系统(IDS/IPS)‌、‌端口扫描与漏洞扫描技术‌等。

qq_56248592的博客 1902

从零开始跑通3DGS教程:(四)修改(缩放、空间变换)colmap生成的sfm结果

通过colmap进行的sfm的普通方式会丢失场景的物理尺度信息,并且并不在符合一般认知的坐标系下,本文将读取colmap生成的点云和相机pose,将其进行空间变换和缩放之后,重新保存,新保存的结果仍然可以被colmap读取以及进行后续的稠密重建以及3dgs等工作

诺有缸的高飞鸟的博客 1424

数据结构——链表

本文详细的介绍了链表的概念与结构,并且手撕了两种常见的主要的链表基本逻辑和代码实现,希望能让大家更好的学习链表这种数据结构。

xhyly_9的博客 1993

HTML满屏跳动的爱心(完整代码)

HTML语言实现满屏跳动爱心的完整代码。

AIGC 12万+

DataStructure day3, One-way linked list (C project Created and tested in Qt)

C data structure one-way linked list

YamamotoIsoroku的博客 108

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

_DataStructure_C_Impl:LinkListBasedSort

#include #include #include"LinkList.h" //创建单链表 void CreateList(LinkList L,DataType a[],int n){ int i; for(i=1;i<=n;i++) InsertList(L,i,a[i-1]); } //用链表实现选择排序。将链表分为两段,p指向应经排序的链表部分,q指向未排序的链表部分 void

Anonymous 1068

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C Datastructure 4 ---- link list(3)

博主了解到的链表(link list)有以下常见的四种: 单向链表(single link list) 循环链表(circular link list) 双向链表(double link list) 静态链表(static link list) 今天来了解下链表的第三种,双向链表(double link list)。双向链表github参考源码双向链表和单项的相比只是多了一个前驱元,实现差别上就是移

leeayu的博客 372

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C/C++技术面试完整指南:从零基础到面试通关的终极攻略

想要在C/C++技术面试中脱颖而出,顺利拿到心仪的offer吗?这个开源项目为你提供了全面的C/C++技术面试知识体系,涵盖语言特性、数据结构、算法、操作系统、网络编程等核心技术领域,是求职者和初学者的宝贵资源。无论你是刚入门的新手,还是有一定经验的开发者,这里都能帮助你系统化地准备技术面试,快速提升竞争力。 ## 🚀 5分钟快速上手:立即开始你的面试准备之旅 如果你时间有限,想快速了解这个

gitblog_00941的博客 340

链表(详解)

1、链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,有一系列结点(地址)组成,结点可动态的生成。2、结点包括两个部分:(1)存储数据元素的数据域(内存空间),(2)存储指向下一个结点地址的指针域。3、相对于线性表顺序结构,操作复杂。

m0_69323023的博客 1万+

数据结构---单向链表,双向链表,单向环形链表

链表介绍 链表是以节点的方式来存储,是链式存储 每个节点包含 data 域, next 域:指向下一个节点. 如图:发现链表的各个节点不一定是连续存储. 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定 修改节点功能 思路(1) 先找到该节点,通过遍历,(2) temp.name = newHeroNode.name ; temp.nickname= newHeroNode.n...

root1994的博客 5841

【数据结构】链表

链表

knous 6万+

链表的基本概念

链表链表单链表不带头结点单链表带头结点单链表循环单链表双向链表双向不循环链表带头结点的双向不循环链表双向循环链表带头结点的双向循环链表带头结点的双向循环链表的实现 链表 由字面意义可知,链表即链式链接而形成的,链表是一种物理上不一定连续、非顺序的存储结构,数据元素的逻辑顺序取决于链表指针链接次序,例如下列结构: NULL:表示指针域为空,即最后一个链表结点 链表分为:单链表、双链表、带头结点与不带头结点链表 单链表 不带头结点单链表 带头结点单链表 需要提前设定一个头结点 head: 循环单链表 双

奔赴在热爱征程上的小小孩~ 1239

数据结构 09-链表概念及常见链表结构

链表概念 前面提到,栈、队列都可以视作是一种特殊的线性表,在绝大多数语言中都是连续存储的。而链表则是不连续的存储方式,自适应内存大小,通过指针的使用,灵活将不同的内存块联系起来,实现动态增加动态删除。 链表的基础是结点 node,每个结点应该包含至少两个区域,一个是存放数据的区域,一个是指向下一个节点的指针。对于整个链表而言,应该有指向头结点的头指针,尾部结点根据链表的不同类型可以指向空(单链表),也可以指向头节点(循环链表)。根据指针的配置,结点可以是单向的,也可以是双向...

一分耕耘一分收获 1114

[数据结构]——链表详解

数据结构---链表详解

m0_62023005的博客 4459

链表超详细讲解(链表基础概念与哨兵节点)

链表是由节点串联而成的数据结构,每个节点包含两部分:数据域:存储元素值;指针域:指向其他节点(单向链表指向后继,双向链表还指向前驱)。与数组的核心区别:数组:内存连续,可通过索引随机访问,但长度固定,扩容成本高;链表:内存分散,需顺序访问,但长度动态,插入 / 删除效率高(无需移动元素)。哨兵节点,又称哑节点,是一种特殊的节点,在链表等数据结构中广泛应用。哨兵节点本身不存储有实际意义的数据,它是一个额外增设的节点,纯粹为了简化边界条件的处理。比如在单向链表中,它可以位于头节点之前;

weixin_52811458的博客 1160
上一篇: DataStructure---LinkedList,链表(定义部分)
下一篇: 串比较的若干算法归类————普通、KMP算法
fishstudio
博客等级 码龄23年 4粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值