static关键字声明的全局变量只有本文件内的函数可以引用,其它文件(模块)只能通过该模块提供的接口函数来访问这个static全局变量,而不能直接对其进行操作。

对于一个存储类别声明为static的全局变量而言,其生命周期并没哟发生改变,在整个程序执行过程中该变量一直存在。但其作用域反而有所减小,只有本文件的函数可以引用该全局变量。

  1 /*2  * FILE: p65_linkOperate_list.c3  * DATE: 201801074  * --------------5  * DESCRIPTION: static全局变量只有本文件内的函数可以引用6  * 其它文件(模块)只能通过该模块提供的接口函数来访问这个static全局变量7  * insert插入节点,print遍历打印节点,destroy遍历释放节点8  */9 10 #include <stdio.h>11 #include <stdlib.h>12 13 struct node{14         int val;15         struct node *next;16 };17 18 // static 链表头19 static struct node *head;20 21 /* 插入节点 */22 int insert(int val)23 {24         struct node *p, *q;25         p = head;26         // 创建新节点27         q = (struct node *)malloc(sizeof(struct node));28         if(q == NULL)29         {30                 perror("ERROR: malloc, fail to apply memory");31                 return -1;32         }33         q->val = val;34         q->next = NULL;35         // 节点链入链表36         if(p == NULL)37         {38                 head = q;       // 注意 此处不是 p=q39         }40         else41         {42                 while(p->next != NULL)43                         p = p->next;44                 p->next = q;45         }46         return 0;47 }48 49 /* 遍历链表,打印每个节点的值 */50 void print()51 {52         struct node *p = head;53         while(p != NULL)54         {55                 printf("%d\n", p->val);56                 p = p->next;57         }58 }59 60 /* 遍历链表,释放每一个节点 */61 void destroy()62 {63         struct node *p = head;64         while(p != NULL)65         {66                 struct node *q;67                 q = p;68                 p = p->next;69                 free(q);        // free 释放70         }71         head = NULL;    // 清空链表的头指针72 }
  1 /* FILE: p65_linkOperate_list.h2  * DATE: 201801073  * ---------------4  */5 6 extern int insert(int val);7 extern void print();8 extern void destroy();
  1 /* FILE: p65_linkOperate_main.c2  * DATE: 201801073  * --------------4  */5 6 #include <stdio.h>7 #include <stdlib.h>8 9 #include "p65_linkOperate_list.h"10 11 int main(void)12 {13         int i;14         for(i=0; i<5; i++)15         {16                 if(insert(i) < 0)17                         exit(-1);18         }19         print();20         destroy();21         return 0;22 }
  1 # FILE: Makefile2 # DATE: 201801073 # ==============4 5 OBJECTS = p65_linkOperate_list.o p65_linkOperate_main.o6 7 build: $(OBJECTS)8         gcc -o build $(OBJECTS)9 10 p65_linkOperate_list.o: p65_linkOperate_list.c11         gcc -c p65_linkOperate_list.c12 13 p65_linkOperate_main.o: p65_linkOperate_list.h p65_linkOperate_main.c14         gcc -c p65_linkOperate_main.c15 16 .PHONY: clean17 clean:18         rm build $(OBJECTS)

补充删除指定节点函数

 49 /* 删除指定节点 */50 int del(int val)51 {52         struct node *p, *q;53         p = head;54         if(p == NULL)   // 链表为空55         {56                 fprintf(stderr, "ERROR: the link-list is empty.\n");57                 return -1;58         }59         if(p->val == val)       // 第一个节点就是要删除的节点60         {61                 head = p->next;62                 free(p);63                 return 0;64         }65         else if(p->next == NULL)        // 只有一个节点,且不是所要删除的66         {67                 printf("ERROR: delete, nOt found\n");68                 return -1;69         }70         q = p;71         p = p->next;72         while(p != NULL)73         {74                 if(p->val == val)75                 {76                         q->next = p->next;77                         free(p);78                         printf("SUCCESS: delete.\n");79                         return 0;80                 }81                 q = p;82                 p = p->next;83         }84         printf("ERROR: delete, nOt found\n");85         return -1;86 }

链表之节点插入、删除节点、遍历打印、遍历释放,static 全局变量相关推荐

  1. jquery 元素节点操作 - 创建节点、插入节点、删除节点

    jquery的节点操作说明 前面的篇章对于jquery的元素操作大部分是使用html()的方式来操作,这种直接使用字符串创建的方式也是性能最高的. 使用html()操作节点 首先编写一个div包含一个 ...

  2. 数据结构,单链表讲解,并使用Java代码实现单链表增删改查【尾部添加,中间插入、修改节点、删除节点、展示链表】

    文章目录 单链表 什么是单链表,链式存储结构详解 链表的节点 头节点,头指针和首元节点 单链表的实现 1.尾部添加新节点 思路分析 代码实现 注意事项 2.按照编号插入新节点 思路分析 代码实现 注意 ...

  3. Java数据结构与算法———(8)单链表应用实例,删除节点,根据输入的整数

    在单链表中,根据输入的节点编号删除对应的节点 一.代码 import java.util.Scanner;public class SingleLinkedListDemo {public stati ...

  4. 200818C链表的查询插入删除

    目录 一.学习的知识点 二.上课没有听懂或者没有理解的地方 三.当天学习的收获 四.作业的思路.不会的地方 五.其他需要反馈的问题 六.心得体会 一.学习的知识点 链表结点的遍历: while(pte ...

  5. c语言用链表对学生成绩排序,学生成绩排序和平均分计算利用c语言链表的创建插入删除.doc...

    #define NULL 0 #define LEN sizeof(struct student) struct student { long num; float score; struct stu ...

  6. jQuery节点操作创建节点元素删除节点 替换节点复制节点等基本本操作

    节点操作 jQuery中节点操作 查找节点(前面章节已讲) 创建节点 插入节点 删除节点 替换节点 复制节点 创建节点元素 工厂函数$()用于获取或创建节点 $(selector):通过选择器获取节点 ...

  7. d3.js实现双击删除节点并删除节点上的文字

    最近项目遇到一个问题:删除节点,节点上的文字却无法删除. 经过F12的调试,我发现原来自己写的节点.连线.文字分别包裹在不同的g标签内. 于是出现了两种解决方案: (1)把文字依附在节点上 (2)选中 ...

  8. JavaScript 节点概述 、父节点 parentNode、子节点children、兄弟节点、创建节点 添加节点、删除节点、复制拷贝节点 ★案例★

    一般 节点至少拥有nodeType(节点类型).nodeName(节点名称)和nodeValue(节点值)这三个基本属性 元素节点 nodeType 为 1 属性节点 nodeType 为 2 文本节 ...

  9. 动态生成节点与删除节点

    一.动态生成节点 使用$(html字符串)来创建DOM节点,并且返回一个JQuery对象,然后使用append()等方法将该JQuery对象添加到Dom中,比如 var a=$("<a ...

  10. JS对DOM节点的操作--增加节点,删除节点

    (1):DOM :DOM文档树的全称是document object model ,也就是文档对象模型,在js中,把整页面当成一个dom树,而我们可以对每一个节点都可以进行相应的操作,比如创建一个节点 ...

最新文章

  1. win10用什么软件测试硬件,Win10系统下硬件设备检测工具的使用方法
  2. javascript的typeof返回哪些数据类型
  3. ​Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
  4. [转] apache配置rewrite及.htaccess文件
  5. BZOJ 1898: [Zjoi2005]Swamp 沼泽鳄鱼 [矩阵乘法]
  6. java xml接口实例化_Spring简介及xml配置
  7. 构造函数的五种继承方法
  8. Java实现动画逐字打印
  9. 《HTML5 从入门到精通--7.6.3 单元格垂直跨度——rowspan》
  10. centos 关闭命令行警报声
  11. Flutter之RenderView RenderObject ParentData知识点梳理
  12. ES6学习笔记五(对象)
  13. python 图像二值化处理
  14. 用C++可编程管线渲染obj模型
  15. 百度地图 创建应用
  16. 简单理解工作量单位:人月、人日、人时
  17. Java反射获取类,方法
  18. mysql判断空_MySQL判断字段是否为null
  19. ArcGIS 地图切图系列之(一)切片原理解析
  20. 连锁酒店网络互联解决方案

热门文章

  1. 用友软件显示系统加密服务器,用友云主机指向加密服务器
  2. 5G/NR,MCS与TBS的计算
  3. mov视频怎么转换mp4格式
  4. JDBC_学习笔记(婷姐教的)
  5. 转载【Java爬取某姐的小视频】
  6. 致传统企业朋友:不够痛就别微服务,有坑!
  7. clamav杀毒软件
  8. ios android跨服务器,《大话西游》手游_iOS安卓跨系统角色转移功能介绍_《大话西游》手游官网...
  9. 关于学连锁经营管理专业的问题_百度知道
  10. 更改触摸屏校准程序界面提示文字