Linux C 学习 单向链表

最近从Linux C数据结构和算法学起,下面是一个单向链表的写法,代码如下:

[cpp] view plaincopy
  1. #include <stdio.h>  
  2. #include <malloc.h>  
  3.   
  4.   
  5. int n=0;  
  6. typedef struct code  
  7. {  
  8.  int data;  
  9.  struct code *next;  
  10. }List;  
  11.   
  12.   
  13. List *creatlink()  
  14. {  
  15.  List *head;  
  16.  List *p1;  
  17.  List *p2;  
  18.  head=NULL;  
  19.  p1=(List *)malloc(sizeof(List));  
  20.  p2=(List *)malloc(sizeof(List));  
  21.  printf("Please print the data you want:(end is 0)\n");  
  22.  scanf("%d",&p1->data);  
  23.  while(p1->data!=0)  
  24.  {  
  25.    n++;  
  26.    if(n==1)  
  27.     {  
  28.      head=p1;  
  29.     }  
  30.     else  
  31.      {  
  32.        p2->next=p1;  
  33.      }  
  34.        p2=p1;  
  35.        p1=(List *)malloc(sizeof(List));  
  36.        scanf("%d",&p1->data);  
  37.         // printf("\n%d\n",p1->data);  
  38.    }  
  39.    free(p1);  
  40.    p2->next=NULL;  
  41.    return(head);   
  42. }  
  43.   
  44.   
  45. void Print(List *head)  
  46. {  
  47.  List *p;  
  48.  p=head;  
  49.  if(head!=NULL)  
  50.    do  
  51.   {  
  52.    printf("[%d]->",p->data);  
  53.    p=p->next;  
  54.   }  
  55.   while(p!=NULL);  
  56.   printf("\nover!\n");  
  57.    
  58. }  
  59.   
  60.   
  61. int main()  
  62. {  
  63.  List *head;  
  64.  head=creatlink();  
  65.  Print(head);  
  66.  return(0);  
  67. }  



结果如下:


单向链表建立容易犯错误的是这一块:

  if(n==1)
    {
     head=p1;
    }
    else
     {
       p2->next=p1;
     }
       p2=p1;
       p1=(List *)malloc(sizeof(List));
       scanf("%d",&p1->data);
        // printf("\n%d\n",p1->data);
   }

先判定头指针,然后再重新为p1申请一片内存,来存放下一个链表里的内容


malloc()最容易出现的问题是内存泄露,所以一定要记得free();


下面有个例子:

兄弟问:" free(p);p=NUll;",为啥free(p)之后,还要置p=NULL呢?有必要么?


free(p)只是将p指向的空间释放掉了,但是p并不等于NULL;

code:

int main()
{
    int *p;
    p = (int *)malloc(sizeof(int) * 10);
    printf("before free:  p=%p\n",p);
    free(p);
    printf("after free: p = %p\n",p);
    printf("%d\n",p[0]);
    p=NULL;
    printf("%d\n",p[0]);
}


result:
before free:  p=0x8fa7008
after free: p = 0x8fa7008
0
段错误

也就是p虽然有值,但其指向的空间已经被释放掉了。如果在后续的code中再用到p,就会出现错误,而这种错误是不太明显的。如果显式的置为null的话,就可以使错误马上显现出来。从而避免了调试程序中种种诡异的麻烦。

结论:
           如果在程序中free(p)之后,p不会再用,则令p=NULL无所谓。
           如果在程序中free(p)之后,p还会用到,则令p=NULL,还原p为纯净的变量,便于以后差错。

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

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

相关文章

[转载]如何将Putty生成的PrivateKey转换为SecureCRT所需的PublicKey

为什么80%的码农都做不了架构师&#xff1f;>>> 首先说明&#xff0c;标题不一定准确&#xff0c;因为盆地并未详细了解清楚这里的公钥、私钥机制&#xff0c;只是根据以前的印象有个大概的理解&#xff0c;且最终以解决问题为主要目的&#xff0c;并未深究。标题的…

exports、module.exports和export、export default到底是咋回事

前言 难得有空&#xff0c;今天开始重新规范的学习一下node编程。 但是引入模块我看到用 require的方式&#xff0c;再联想到咱们的ES6各种export 、export default。 阿西吧&#xff0c;头都大了.... 头大完了&#xff0c;那我们坐下先理理他们的使用范围。 require: node …

linux自动备份网站和数据库,到另外服务器上,为当前用户创建定时任务

2019独角兽企业重金招聘Python工程师标准>>> 两台服务器111&#xff0c;和117服务器,每天完成111服务器上网站和数据库自动备份到117服务器上 1&#xff1a;我的111服务器上是当前用户&#xff1a;sx A: 查看当前用户的计划任务&#xff1a;crontab -l是查看当前…

自定义控件三部曲之动画篇(一)——alpha、scale、translate、rotate、set的xml属性及用法...

前言&#xff1a;这几天做客户回访&#xff0c;感触很大&#xff0c;用户只要是留反馈信息&#xff0c;总是一种恨铁不成钢的心态&#xff0c;想用你的app&#xff0c;却是因为你的技术问题&#xff0c;让他们不得不放弃&#xff0c;而你一个回访电话却让他们尽释前嫌&#xff…

Linux c 算法与数据结构--栈

前段时间写了双向链表&#xff0c;现在写个栈&#xff0c;写之前&#xff0c;先简单介绍链表 队列  栈的区别&#xff1a; 链表&#xff0c;队列&#xff0c;堆栈的区别 1、栈是个有底的口袋&#xff0c;像袜子。 队列是没底的口袋&#xff0c;像通心粉。 所以&#xff1a;栈…

Spring 实现数据库读写分离

Spring 实现数据库读写分离 现在大型的电子商务系统&#xff0c;在数据库层面大都采用读写分离技术&#xff0c;就是一个Master数据库&#xff0c;多个Slave数据库。Master库负责数据更新和实时数据查询&#xff0c;Slave库当然负责非实时数据查询。因为在实际的应用中&#xf…

vue 3.x 中使用ele-image时相对路径的图片加载失败

参考文档&#xff1a; https://element.eleme.cn/#/zh-CN/component/installation 环境: Mac OS X 10.12 [zcmele 2]$node -v v12.6.0 [zcmele 3]$npm -v 6.9.0 [zcmele 4]$cnpm -v cnpm6.1.0 (/usr/local/lib/node_modules/cnpm/lib/parse_argv.js) npm6.10.2 (/usr/local/li…

ie6兼容问题汇总

这几天在查找和解决网页在ie6下的兼容性问题花了我不少的时间&#xff0c;参考了网上的一些解决方法和自己做出来比较有效果的给大家参考一下&#xff0c;也方便我日后再用到&#xff1a; 1.IE的cache设置为Every visit to the page&#xff0c;而不是默认的Automatically。基本…

Linux C 数据结构---线性表

数据结构指的是数据元素及数据元素之间的相互关系&#xff0c;包含下面三方面的内容&#xff1a; 其中&#xff0c;线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系&#xff0c;即除了第一个和最后一个数据元素之外&#xff0c;其…

Postman发送请求时带上登录信息

正常情况下&#xff0c;没有登录验证等公共接口&#xff0c;用postman进行get或post请求都很方便&#xff0c;加上相应的参数就行。 但是对于某些接口&#xff0c;可能需要先登录后才能请求&#xff0c;这时如果按正常的思路请求&#xff0c;可能就会被拦截了。 对于这种情况…

Chrome跨域问题

2019独角兽企业重金招聘Python工程师标准>>> 在chrome图标&#xff0c;右键--->属性 --->目标 路径末尾添加 “--disable-web-security” 重启即可 转载于:https://my.oschina.net/u/861562/blog/152171

Linux C 数据结构---单向链表

线性表存储结构分为顺序存储、链式存储。 顺序存储的优点&#xff1a; 顺序存储的缺点&#xff1a; 链表就是典型的链式存储&#xff0c;将线性表L &#xff08;a0,a1,a2,........an-1&#xff09;中个元素分布在存储器的不同存储块&#xff0c;成为结点&#xff08;Node&…

分页插件--根据Bootstrap Paginator改写的js插件

刚刚出来实习&#xff0c;之前实习的公司有一个分页插件&#xff0c;和后端的数据字典约定好了的&#xff0c;基本上是看不到内部是怎么实现的&#xff0c;新公司是做WPF的&#xff0c;好像对于ASP.NET的东西不多&#xff0c;导师扔了一个小系统给我和另一个同事&#xff0c;指…

Linux C 算法分析初步

提到算法&#xff0c;必须提到数据结构&#xff0c;我们要知道一个著名公式&#xff1a; 数据结构 算法 程序 我们先看看下面这张图&#xff1a; 算法是什么&#xff1f;算法是一个有穷规则&#xff08;或语句、指令&#xff09;的有续集和。他确定了解决某一问题的一个运算序…

hive实例,GPRS流量统计

2019独角兽企业重金招聘Python工程师标准>>> 最近面试&#xff0c;发现很多公司在使用hive对数据进行处理。 hive是hadoop家族成员&#xff0c;是一种解析like sql语句的框架。它封装了常用MapReduce任务&#xff0c;让你像执行sql一样操作存储在HDFS的表。 hive的表…

Linux C 数据结构—-循环链表

前面我们学习了单向链表&#xff0c;现在介绍单向循环链表&#xff0c;单向循环链表是单链表的一种改进&#xff0c;若将单链表的首尾节点相连&#xff0c;便构成单向循环链表结构&#xff0c;如下图&#xff1a; 对于一个循环链表来说,其首节点和末节点被连接在一起。这种方式…

预备作业03 20162320刘先润

第一次编代码 这几周自学了Linux基础入门&#xff0c;有好多想吐槽的地方&#xff0c;所以这篇随笔是带有半吐槽性质的&#xff0c;这是我学完后最真实的感受 我在电脑上按照教程安装了虚拟机&#xff0c;对于Linux这个完全陌生的概念也稍微算是有些理解&#xff0c;但是还有很…

JTable 失去焦点时取消编辑状态

为什么80%的码农都做不了架构师&#xff1f;>>> reference&#xff1a; http://tips4java.wordpress.com/2008/12/12/table-stop-editing/ 当JTable的单元格处于编辑状态时&#xff0c;如果用户触发以下事件&#xff0c;表格就会退出编辑状态&#xff0c;进而调用T…

Linux C 数据结构——栈

还是先把这张图贴出来&#xff0c;以便对比和理解 栈是限制在一段进行插入操作和删除操作的线性表&#xff08;俗称堆栈&#xff09;&#xff0c;允许进行操作的一端称为“栈顶”&#xff0c;另一固定端称为“栈底”&#xff0c;当栈中没有元素称为“空栈”。特点&#xff1a;先…

常用的HTTP状态码

2019独角兽企业重金招聘Python工程师标准>>> 第一、成功的状态码&#xff1a; 1&#xff09;200 OK – 服务器成功返回网页 2&#xff09;304 Not Modified – 未修改 第二、失败的状态码&#xff1a; 3&#xff09;404 Not F…