您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

学习体验:C语言超详细的实现了链表的操作。 <免费源码>

  • 时间:2022-10-27 00:32 编辑: 来源: 阅读:298
  • 扫一扫,手机访问
摘要:学习体验:C语言超详细的实现了链表的操作。 <免费源码>
今天给大家讲一下链表的学习经验。 学习数据结构,毫无疑问,链表一定要学好。下面的栈、队列、树、图都是基于链表的;链表有很多种,包括单链表、双链表、循环链表和非循环链表。这里我们以无环单链表为例来讲一下链表的创建,长度,排序,插入,排序。 1.什么是链表?我的理解应该包括以下特征:(1)由n个节点离散分布;(2).每个节点由指针(3)连接。每个节点由前一个节点和后一个驱动节点(4)组成。第一个节点没有前一个节点,最后一个节点没有后一个驱动节点;满足以上四项,我们称之为链表;既然链表是由很多节点组成的,那么节点是由什么组成的呢?节点由两部分组成,一部分是数据字段,用来存储有效数据;两个指针字段,用于指向下一个节点;下面用C语言来构造链表数据结构。首先要构造节点,然后将所有节点连接起来形成链表。(1)节点的结构typedef struct Node { int data//数据字段,用于存储数据字段;结构节点* pNext//定义一个结构指针,指向与当前节点数据类型相同的下一个节点}NODE,* PNODE//NODE等效于struct节点;PNODE等效于struct node *;这里用大写来区别于变量,便于人们将其作为一种数据类型。typedef只是给了数据类型一个单独的名称,即typedef数据类型的别名;我们知道struct Node是我们定义的数据类型;(2)链表的创建在创建链表之前,我们需要了解一些专业术语:第一个节点:存储第一个有效数据的节点;End:存储最后一个有效数据的节点;头节点:头节点的数据类型与首节点相同,头节点是首节点前面的节点,不存储有效数据;节点的存在只是为了方便链表的操作。 头指针:指向头节点的指针;尾指针:指向尾节点的指针;首先要创建一个head节点,用head指针指向它,用C语言描述:用malloc向计算机申请一块内存,定义一个指向和head节点相同数据类型的指针(一定要明确判断内存申请成功与否);然后,要知道要创建的链表的长度,用循环一次创建一个节点,把每个节点连接在一起;如果我们要在头节点phead之后插入节点p:(1)将头节点的指针字段指向节点p,即phead->;pNext = p;(2) p->pNext = NULL可以吗?我们想一想可以发现,当我们要插入多个节点时,头节点总是指向最后添加的数据,此时头指针找不到前一个节点;我们定义了一个尾指针pTail,总是用来指向链表的末尾,一次只在pTail之后添加节点。 伪算法:(1)定义一个尾指针pTail并初始化指向头节点,即pTail = pHead;(2)在pTail后增加一个节点,修改指针:pTail->;pNext = p;p->;pNext = NULLpTail = p;//使pTail指向最后一个元素PNODE Create _ List(void){ int len;//存储链表的长度int I;//循环变量int val//用于临时存储客户输入的节点的值PNODE列表;PNODE pHead =(PNODE)malloc(sizeof(NODE));//分配一个头节点if (null = = phead) {printf("内存分配失败");退出(-1);} else { PNODE pTail = pHeadpHead-& gt;pNext = NULLprintf("请输入列表长度:");//需要一个指针始终指向链表的末尾scanf ("%d ",& len);for(I = 0;I { PNODE p =(PNODE)malloc(sizeof(NODE));if(NULL==p){printf("内存分配失败");退出(-1);}else{printf("请输入list的值:");scanf("%d ",& ampval);p->;data = valpTail->;pNext = p;p->;pNext = NULLpTail = p;} } }返回pHead}边肖推荐一个学习氛围极好的地方,C/C++交流企鹅裙:870963251!适合大学生,小白,谁想要改变职业生涯,并加入到这个求职。 裙子里有很多学习资料,有大神解答交流问题,每晚还有免费直播课。2.向链表中插入元素。如果要在节点2前面插入节点P,首先要找到节点2的前任节点1。假设现在Q指针指向节点1,那么(1)P->;pNext = q-& gt;pNext(2)q->pNext = p;程序代码如下://在链表中pos有效元素前面插入元素val。首先要找到pos元素前面的元素的位置;//当链表有3个元素,pos=4时,不会执行插入操作bool insert _ list (pnode phead,int pos,int val){ int I = 0;PNODE p = pHeadwhile((NULL!= p)& amp;& amp(I { p = p-& gt;pNexti++;} if(p = = NULL | | I & gt;Pos-1) //链表为空;我& gtPos-1可以防止客户输入错误;返回false//程序在这里执行后,I = pos-1;p指针指向链表中第pos-1有效节点的前身,即第pos-1节点;PNODE q =(PNODE)malloc(sizeof(NODE));q->;data = valq->;p next = p-& gt;pNextp->;pNext = q;}3.删除链表中的元素。如果要删除节点2,只需将节点1的指针字段指向节点3,但不要忘记释放节点2占用的内存,否则会造成内存泄漏;首先要找到节点2的前任节点1,假设P指向节点1。 (1)q=p->pNext//先用Q保存待删除节点的地址;(2)p->pNext = q-& gt;pNext//q-& gt;p next = p-& gt;p next-& gt;pNext修改指针,将节点1指向节点3;(3)免费(q);//释放节点2占用的内存;bool Delete_List(PNODE pHead,int pos,int * val){ int I = 0;PNODE p = pHeadwhile((NULL!= p)& amp;& amp(I { p = p-& gt;pNexti++;} if(p = = NULL | | I & gt;Pos-1) //链表为空;我& gtPos-1可以防止客户输入错误;返回false//程序在这里执行后,I = pos-1;PNODE q = p-& gt;pNext//q指向要删除的节点;* val = q-& gt;数据;p->;pNext = q-& gt;pNext//修改指向链表的指针;免费(q);//释放Q指向的节点的内存;q = NULL//千万不要忘记,否则会出现野指针;}4.链表元素快速排序和冒泡排序的思想同样适用于链表的数据结构。下面是通过选择排序对链表进行排序的方法;//链表中有效元素的个数int length _ list(pnodephead){ int len = 0;//定义变量的时候记得初始化;PNODE p = pHead-& gt;pNextwhile(NULL!= p){ len++;p = p-& gt;pNext}返回len}//对链表void sort _ list (pnode phead)中的元素进行排序{int i,j;内部温度;int len = Length _ List(pHead);PNODE p,q;//指向链表中的第一个有效元素(I = 0,P = phead->;pNextipNext){for(j=i+1,q = p-& gt;pNextJpNext){//交换数据if(p-->:data & gt;q->;data){ temp = p-& gt;数据;p->;data = q-& gt;数据;q->;data = temp}}}}和数组排序很像,只是这里需要两个指针P和Q不断移动才能得到链表中的数据元素;


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部