关于链表的简单创建和遍历

在这里插入图片描述
这是网上的的源码:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>//    定义链表中的节点
typedef struct node
{int member;                //    节点中的成员struct node *pNext;        //    指向下一个节点的指针
}Node,*pNode;//    函数声明
pNode CreateList();                //    创建链表函数
void TraverseList(pNode );        //    遍历链表函数int main()
{pNode pHead = NULL;            //    定义初始化头节点,等价于 struct Node *pHead == NULLpHead = CreateList();        //    创建一个非循环单链表,并将该链表的头结点的地址付给pHeadTraverseList(pHead);        //    调用遍历链表函数return 0;
}//    创建链表函数
pNode CreateList()
{int i;                                            //    用于下面循环int len;                                        //    用来存放有效节点的字数int val;                                        //    用于临时存放用户输入的数据pNode pHead = (pNode)malloc(sizeof(Node));        //  分配一个不存放有效数据的头结点pNode pTail = pHead;                            //    链表的最后一个节点pTail->pNext = NULL;                            //    最后一个节点的指针置为空printf("请输入节点个数:");scanf("%d",&len);for(i = 0; i < len; i++){printf("第 %d 个节点的数值:",i+1);scanf("%d",&val);pNode pNew = (pNode)malloc(sizeof(Node));    //    为节点分配空间pNew->member = val;                            //将用户输入的数据赋给节点的成员pTail->pNext = pNew;                        //将最后一个节点的指针指向下一个新的节点pNew->pNext = NULL;                            //将新节点中的指针置为空pTail = pNew;                                //将新节点赋给最后的一个节点}return pHead;                                    //返回头节点}//    遍历链表函数
void TraverseList(pNode pHead)
{pNode p = pHead->pNext;                            //将头节点的指针给予临时节点pwhile(NULL != p)                                //节点p不为空,循环{printf("%d ",p->member);                    p = p->pNext;                                }printf("\n");return ;} 

自己照着视频敲了一遍,结果卡在一个点上

#include<stdio.h>   //创建非循环链表 
#include<stdlib.h>
#include<malloc.h>
typedef struct Node
{
int data;
struct Node *pNext;
}NODE,*PNODE;//相当于直接给了个*号  struct Node *int main(void)
{PNODE pHead	=NULL;//相当于 struct Node *pHead =Null;先定义清空指针 pHead = create_list();traverse_list(pHead);return 0; 
}PNODE  create_list(void);
{int len,i,val;PNODE pHead=(PNODE)malloc(sizeof(Node));//分配pHead pintf("请输入你要生成几个节点");scanf("%d",&len);PNODE pTail=pHead;pTail->pNext=NULL;for(i=0;i<len;i++){printf("请输入第%d个数",i+1);scanf("%d",&val);PNODE pNew =(PNODE)malloc(sizeof(Node));//分配pNew pNew->data= val;pTail->pNext=pNew;pNew->pNext=NULL;pTail=pNew; }return pHead; 
}void traverse_list(PNODE pHead)
{PNODE p = pHead->pNext;                            //将头节点的指针给予临时节点pwhile(NULL != p)                                //节点p不为空,循环{printf("%d ",p->data);                    p = p->pNext;                                }printf("\n");return;} 

在这里插入图片描述
老是说定义的函数类型冲突,哪有冲突啊,不是返回地址型嘛,都是用PNODE的啊,咋就错了呢,比较了一下上面的代码感觉都一样就是不知道哪里出了bug,改天再看看。

创造链表:先分配内存,给数据域赋值,将尾结点指向临时节点,再将临时节点指向空,最后将临时节点赋给尾结点。
就像一条蛇一样,先创造一个东西,然后将它吞并,再创造下一个东西,再吞并。

¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
#######################################################################################

今天我又重新检查了一遍上面的代码,一个一个比对终于发现了问题
在这里插入图片描述
首先函数后面能加分号嘛?昨天检查了那么多遍还是没搞出来,的确是状态不好。这么低级的错误都没发现,这个函数又不是放在主函数里的。需要加什么分号。

在这里插入图片描述
其次结构体和主函数之间是需要添加函数声明的,我一直以为这只是个形式,我以前从来没遇到过函数还要声明的情况,函数不是只能调用吗…也只有变量需要声明吧(手动滑稽)!
在这里插入图片描述
第三个错误就是我把printf给写漏了一个字母,这看上去让人崩溃,几十行几百行的代码,一个单词少写一个字母也是在所难免的啊,可程序就是不放过你的这个错误,行吧,我认了。

可以看到吧,这就是纯手打代码的弊端,错误率居高不下,找bug找到让人崩溃。
但还是有点收获的,自己写的能让自己对这个程序更加的了解、熟知,对以前不知道,不注意的地方进行补充。
同时也让我掌握了一种学习方法,就是想不明白的,不要着急,现在不明白,可以存疑留到明天,明天甚至可以再存到后天,只要每天有点感悟就好了。

总结一下吧

  1. 先构造结构体
  2. 声明函数
  3. 主函数
  4. 创造链表
  5. 遍历链表

最难的就是构造链表了,想明白了,就算你链表入门了

附上我改好后的链表(纯手打)

#include<stdio.h>   //创建非循环链表 
#include<stdlib.h>
#include<malloc.h>
typedef struct Node
{
int data;
struct Node *pNext;
}NODE,*PNODE;//相当于直接给了个*号  struct Node *// 函数声明
PNODE create_list();                //    创建链表函数
void traverse_list(PNODE);  //    遍历链表函数int main(void)
{PNODE pHead	=NULL;//相当于 struct Node *pHead =Null;先定义清空指针 pHead = create_list();traverse_list(pHead);return 0; 
}PNODE create_list(void)
{int len,i,val;PNODE pHead=(PNODE)malloc(sizeof(NODE));//分配pHead printf("请输入你要生成几个节点");scanf("%d",&len);PNODE pTail=pHead;pTail->pNext=NULL;for(i=0;i<len;i++){printf("请输入第%d个数",i+1);scanf("%d",&val);PNODE pNew =(PNODE)malloc(sizeof(NODE));//分配pNew pNew->data= val;pTail->pNext=pNew;pNew->pNext=NULL;pTail=pNew; }return pHead; 
}void traverse_list(PNODE pHead)
{PNODE p = pHead->pNext;                            //将头节点的指针给予临时节点pwhile(NULL != p)                                //节点p不为空,循环{printf("%d ",p->data);                    p = p->pNext;                                }printf("\n");return;} 

至于链表的删除,插入,修改之类的,放到以后学了,有时间有心情就会来看看,慢慢来!!!
试试如何改变字体的颜色
试试如何改变字体的颜色

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可能是最全面的 Java G1学习笔记

转载自 可能是最全面的 Java G1学习笔记 引子 最近遇到很多朋友过来咨询G1调优的问题&#xff0c;我自己去年有专门学过一次G1&#xff0c;但是当时只是看了个皮毛&#xff0c;因此自己也有不少问题。总体来讲&#xff0c;对于G1我有几个疑惑&#xff0c;希望能够在这篇文章中…

nssl1176-轨道【数论,Dp】

正题 题目大意 给出n,m,kn,m,kn,m,k v∏i1nai(ai∈N,ai<m)k(gcd(v,k)1)v\frac{\prod_{i1}^na_i(a_i\in N_,a_i<m)}{k}(gcd(v,k)1)vk∏i1n​ai​(ai​∈N​,ai​<m)​(gcd(v,k)1) 求aaa的方案个数mod10007mod\ 10007mod 10007的值 解题思路 fi,jf_{i,j}fi,j​表示前i个…

微服务~Eureka实现的服务注册与发现及服务之间的调用

微服务里一个重要的概念就是服务注册与发现技术&#xff0c;当你有一个新的服务运行后&#xff0c;我们的服务中心可以感知你&#xff0c;然后把加添加到服务列表里&#xff0c;然后当你死掉后&#xff0c;会从服务中心把你移除&#xff0c;而你作为一个服务&#xff0c;对其它…

新高考增值评价系统业务简单介绍(超详细,图文并茂)

大家好&#xff0c;我是雄雄。 文章目录一&#xff1a;基本信息1&#xff1a;学校信息2&#xff1a;教师管理1&#xff1a;下载教师模板2&#xff1a;上传教师模板3&#xff1a;查看教师数据4&#xff1a;教师信息编辑5&#xff1a;新增教师6&#xff1a;导出教师数据3&#xf…

一步一步详解高斯日记

这是有一年的蓝桥杯的题目&#xff0c;感觉挺有趣的 意思就是高斯有个习惯&#xff0c;记日期的时候喜欢只用数字来记&#xff0c;比如如果你2001年一月一日出生的话&#xff0c;你活到2002年1 月一日&#xff0c;他就会写个366。大致意思就是你现在的时间减去个出生的时间1就是…

微服务配置中心实战:Spring + MyBatis + Druid + Nacos

转载自 微服务配置中心实战&#xff1a;Spring MyBatis Druid Nacos 很多基于 Spring MVC 框架的 Web 开发中&#xff0c;Spring MyBatis Druid 是一个黄金组合&#xff0c;在此基础上如果融入一个配置中心&#xff0c;会发生什么特别的变化呢&#xff1f; 本文将通过一…

揭晓新版《Windows Sysinternals实战指南》读书积赞活动

参与新版《Windows Sysinternals实战指南》&#xff0c;读书积赞活动的一下三位同学&#xff08;想法构成&#xff0c;我zzz&#xff0c;kergee&#xff09;&#xff0c;请加我微信geffzhang&#xff0c;把姓名&#xff0c;地址和手机号发给我&#xff0c;后续给你们寄书。.NET…

ssl提高组国庆模拟赛【2018.10.5】

前言 竟然有半IOI赛制&#xff08;雾&#xff09; 成绩 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC1112017myself2017myself2017myself1501501506060609090900002222015hjw2015hjw2015hjw1401401401001001004040400003332015zyf2015zyf2015zyf10010010080808020…

Spring Cloud 终于按捺不住推出了自己的服务网关 Gateway

转载自 Spring Cloud 终于按捺不住推出了自己的服务网关 Gateway Spring 官方最终还是按捺不住推出了自己的网关组件&#xff1a;Spring Cloud Gateway &#xff0c;相比之前我们使用的 Zuul&#xff08;1.x&#xff09; 它有哪些优势呢&#xff1f;Zuul&#xff08;1.x&…

方向、目标、改变

小叙 昨天看了一些大佬的博客&#xff0c;感觉受到了很大的激励&#xff0c;别人学编程的时间也很晚&#xff0c;想必绝大多数人学习编程的时间都是很晚&#xff0c;大学之后才学的应该不会少数&#xff0c;那些非本专业的&#xff0c;可能更晚&#xff0c;甚至毕业之后转专业…

ASP.NET Core中如何调整HTTP请求大小的几种方式

一、前言 一般的情况下&#xff0c;我们都无需调用HTTP请求的大小&#xff0c;只有在上传一些大文件&#xff0c;或者使用HTTP协议写入较大的值时&#xff08;如调用WebService&#xff09;才可能会调用HTTP最大请求值。 在ASP.NET Core 2.0中&#xff0c;它的两个宿主服务器Ke…

USACO2.1【bfs,排序,贪心,dfs,位运算】

前言 开始刷USACO的题了。 正题 刷前必备技能:OI常识,bfs,dfs,位运算,基础贪心,快速排序。 T1:城堡 TheCastleThe CastleTheCastle 评测记录: https://www.luogu.org/recordnew/lists?uid52918&pidP1457 之前写过,详见: https://blog.csdn.net/Mr_wuyongcong/article/d…

常用公有云接入——腾讯

一、ES术语表 本文档涉及的一些常用术语如下&#xff1a; 术语全称中文说明InstanceInstance实例指代一台云服务器。RegionRegion地域表示资源所在的地域&#xff0c;每个地域包含一个或多个可用区。ZoneZone可用区指腾讯云在同一 地域 内电力和网络互相独立的物理数据中心。…

csdn颜色字体的改变

一直想改变一下csdn界面字体的颜色&#xff0c;奈何csdn上没有像Word那样直接改变字体颜色的版面&#xff0c;找半天没找到&#xff0c;后来才知道必须输入代码才能改变字体颜色&#xff0c;这个就很高级了啊 <font face"微软雅黑" color#FF8C00 size2> **一…

ASP.NET Core 2.0 使用支付宝PC网站支付

前言 最近在使用ASP.NET Core来进行开发&#xff0c;刚好有个接入支付宝支付的需求&#xff0c;百度了一下没找到相关的资料&#xff0c;看了官方的SDK以及Demo都还是.NET Framework的&#xff0c;所以就先根据官方SDK的源码&#xff0c;用.NET Standard 2.0 实现了支付宝服务端…

USACO2.2【统计,dp,模拟,位运算】

正题 T1:序言页码 PrefaceNumberingPreface NumberingPrefaceNumbering 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP1465 题目大意 求1∼n1\sim n1∼n的罗马数字每个字母出现的次数。 解题思路 先写一个表&#xff0c;表示这个位上出现哪个数字表示…

mysql实现查询分组查询最后一次的记录

大家好&#xff0c;我是雄雄。 前言 又好久没有写博客了&#xff0c;为什么呢&#xff1f;因为最近没怎么写代码…说起来也惭愧。 今天在项目上遇到了个需求&#xff0c;是这样的&#xff1a;我们数据库中有一表检测记录表&#xff0c;该表中存储的是所有居民每次的检测记录&…

常用公有云接入——华为

一、介绍 1、什么是弹性云服务器? 弹性云服务器是由CPU、内存、镜像、云硬盘组成的一种可随时获取、弹性可扩展的计算服务器&#xff0c;同时它结合虚拟私有云、虚拟防火墙、数据多副本保存等能力&#xff0c;为您打造一个高效、可靠、安全的计算环境&#xff0c;确保您的服…

jenkins~集群分发功能和职责处理

jenkins的多节点集群 在进行自动化部署时&#xff0c;你可以按着它们的项目类型去进行分别部署&#xff0c;这样即可以达到负载均衡&#xff0c;又可以达到一种职责的明确&#xff0c;比如像java的项目你可以使用linux服务来进行部署&#xff08;拉代码&#xff0c;还原&#x…

nginx中配置https的步骤

大家好&#xff0c;我是雄雄。 想必大家都有过配置https的需求吧&#xff0c;今天我就来整理一下&#xff0c;如何在nginx里面配置https 这里先忽略https申请&#xff0c;一般在你申请域名的那里直接弄就行&#xff0c;下面是nginx中的配置代码&#xff1a; server {listen …