链表之节点插入、删除节点、遍历打印、遍历释放,static 全局变量
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 全局变量相关推荐
- jquery 元素节点操作 - 创建节点、插入节点、删除节点
jquery的节点操作说明 前面的篇章对于jquery的元素操作大部分是使用html()的方式来操作,这种直接使用字符串创建的方式也是性能最高的. 使用html()操作节点 首先编写一个div包含一个 ...
- 数据结构,单链表讲解,并使用Java代码实现单链表增删改查【尾部添加,中间插入、修改节点、删除节点、展示链表】
文章目录 单链表 什么是单链表,链式存储结构详解 链表的节点 头节点,头指针和首元节点 单链表的实现 1.尾部添加新节点 思路分析 代码实现 注意事项 2.按照编号插入新节点 思路分析 代码实现 注意 ...
- Java数据结构与算法———(8)单链表应用实例,删除节点,根据输入的整数
在单链表中,根据输入的节点编号删除对应的节点 一.代码 import java.util.Scanner;public class SingleLinkedListDemo {public stati ...
- 200818C链表的查询插入删除
目录 一.学习的知识点 二.上课没有听懂或者没有理解的地方 三.当天学习的收获 四.作业的思路.不会的地方 五.其他需要反馈的问题 六.心得体会 一.学习的知识点 链表结点的遍历: while(pte ...
- c语言用链表对学生成绩排序,学生成绩排序和平均分计算利用c语言链表的创建插入删除.doc...
#define NULL 0 #define LEN sizeof(struct student) struct student { long num; float score; struct stu ...
- jQuery节点操作创建节点元素删除节点 替换节点复制节点等基本本操作
节点操作 jQuery中节点操作 查找节点(前面章节已讲) 创建节点 插入节点 删除节点 替换节点 复制节点 创建节点元素 工厂函数$()用于获取或创建节点 $(selector):通过选择器获取节点 ...
- d3.js实现双击删除节点并删除节点上的文字
最近项目遇到一个问题:删除节点,节点上的文字却无法删除. 经过F12的调试,我发现原来自己写的节点.连线.文字分别包裹在不同的g标签内. 于是出现了两种解决方案: (1)把文字依附在节点上 (2)选中 ...
- JavaScript 节点概述 、父节点 parentNode、子节点children、兄弟节点、创建节点 添加节点、删除节点、复制拷贝节点 ★案例★
一般 节点至少拥有nodeType(节点类型).nodeName(节点名称)和nodeValue(节点值)这三个基本属性 元素节点 nodeType 为 1 属性节点 nodeType 为 2 文本节 ...
- 动态生成节点与删除节点
一.动态生成节点 使用$(html字符串)来创建DOM节点,并且返回一个JQuery对象,然后使用append()等方法将该JQuery对象添加到Dom中,比如 var a=$("<a ...
- JS对DOM节点的操作--增加节点,删除节点
(1):DOM :DOM文档树的全称是document object model ,也就是文档对象模型,在js中,把整页面当成一个dom树,而我们可以对每一个节点都可以进行相应的操作,比如创建一个节点 ...
最新文章
- win10用什么软件测试硬件,Win10系统下硬件设备检测工具的使用方法
- javascript的typeof返回哪些数据类型
- ​Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
- [转] apache配置rewrite及.htaccess文件
- BZOJ 1898: [Zjoi2005]Swamp 沼泽鳄鱼 [矩阵乘法]
- java xml接口实例化_Spring简介及xml配置
- 构造函数的五种继承方法
- Java实现动画逐字打印
- 《HTML5 从入门到精通--7.6.3 单元格垂直跨度——rowspan》
- centos 关闭命令行警报声
- Flutter之RenderView RenderObject ParentData知识点梳理
- ES6学习笔记五(对象)
- python 图像二值化处理
- 用C++可编程管线渲染obj模型
- 百度地图 创建应用
- 简单理解工作量单位:人月、人日、人时
- Java反射获取类,方法
- mysql判断空_MySQL判断字段是否为null
- ArcGIS 地图切图系列之(一)切片原理解析
- 连锁酒店网络互联解决方案