热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C语言学习笔记—链表(二)链表的静态添加及动态遍历

链表的静态添加及动态遍历我们知道数组中的数据存储是有序的,而链表中的数据是无序的但是存在某种联系使之组成链表。那么我们如果向一组数据中添加一个数据元素,

在这里插入图片描述


链表的静态添加及动态遍历

我们知道数组中的数据存储是有序的,而链表中的数据是无序的但是存在某种联系使之组成链表。
那么我们如果向一组数据中添加一个数据元素,对与数组来说比较的费劲,若是越界还得需要重新申请空间等方式满足数据元素的添加和存储。链表就比较简单了,只需要把对应的指针指向适合的节点地址即可。

#include
//定义结构体
struct Test
{int data;struct Test *next;//链表有一个指向自己的指针
};int main()
{putchar('\n');//定义结构体变量struct Test t1 = {1,NULL};struct Test t2 = {2,NULL};struct Test t3 = {3,NULL};struct Test t4 = {4,NULL};struct Test t5 = {5,NULL};//指向对应节点地址形成链表t1.next = &t2;t2.next = &t3;t3.next = &t4;t4.next = &t5;//输出printf("%d %d %d %d %d \n",t1.data, t1.next->data, t1.next->next->data, t1.next->next->next->data, t1.next->next->next->next->data);return 0;
}

执行结果:在这里插入图片描述

我们优化一下上边程序的写法:

#include
//定义结构体
struct Test
{int data;struct Test *next;//链表有一个指向自己的指针
};
//输出链表数据
void printLink(struct Test *head)
{struct Test *piont = head;while(piont != NULL){printf("%d ",piont->data);piont = piont->next;}putchar('\n');
}
int main()
{//定义结构体变量struct Test t1 = {1,NULL};struct Test t2 = {2,NULL};struct Test t3 = {3,NULL};struct Test t4 = {4,NULL};struct Test t5 = {5,NULL};//指向对应节点地址形成链表t1.next = &t2;t2.next = &t3;t3.next = &t4;t4.next = &t5;//输出//printf("%d %d %d %d %d \n",t1.data, t1.next->data, t1.next->next->data, t1.next->next->next->data, t1.next->next->next->next->data);printLink(&t1);putchar('\n');return 0;
}

在这里插入图片描述


统计链表节点个数及链表查找


统计链表节点个数

接着用上边的例子:
思想:编写函数,设置一个计数器,通过传过来的链表头节点,查看其指向是否为空,不为空计数器加。

#include
//定义结构体
struct Test
{int data;struct Test *next;//链表有一个指向自己的指针
};//获取列表节点数
int getLink(struct Test *head)
{int cnt = 0;struct Test *piont = head;while(piont != NULL){cnt++;piont = piont->next;}return cnt;
}int main()
{//定义结构体变量struct Test t1 = {1,NULL};struct Test t2 = {2,NULL};struct Test t3 = {3,NULL};struct Test t4 = {4,NULL};struct Test t5 = {5,NULL};//指向对应节点地址形成链表t1.next = &t2;t2.next = &t3;t3.next = &t4;t4.next = &t5;int ret = getLink(head);printf("the link's is %d \n",ret);return 0;
}

执行结果:
在这里插入图片描述


链表数据查找

#include
//定义结构体
struct Test
{int data;struct Test *next;//链表有一个指向自己的指针
};
//查找数据
int searchLink(struct Test *head,int data)
{while(head != NULL){if(head->data == data){//如果输入的数据与链表里的某一项数据相等就返回1否则返回0return 1;}//跳到下一节点head = head->next;}return 0;
}int main()
{//定义结构体变量struct Test t1 = {1,NULL};struct Test t2 = {2,NULL};struct Test t3 = {3,NULL};struct Test t4 = {4,NULL};struct Test t5 = {5,NULL};//指向对应节点地址形成链表t1.next = &t2;t2.next = &t3;t3.next = &t4;t4.next = &t5;//定义、输入数据int num;scanf("%d",&num);int ret = searchLink(&t1,num);//结果返回if(ret){printf("have %d\n",num); }else{printf("don't have %d\n",num);}return 0;
}

执行结果:
输入不存在的数据:
在这里插入图片描述
存在的数据:
在这里插入图片描述


推荐阅读
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文介绍了在Windows系统上使用C语言命令行参数启动程序并传递参数的方法,包括接收参数程序的代码和bat文件的编写方法,同时给出了程序运行的结果。 ... [详细]
  • 实现一个通讯录系统,可添加、删除、修改、查找、显示、清空、排序通讯录信息
    本文介绍了如何实现一个通讯录系统,该系统可以实现添加、删除、修改、查找、显示、清空、排序通讯录信息的功能。通过定义结构体LINK和PEOPLE来存储通讯录信息,使用相关函数来实现各项功能。详细介绍了每个功能的实现方法。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • 《2017年3月全国计算机等级考试二级C语言上机题库完全版》由会员分享,可在线阅读,更多相关《2017年3月全国计算机等级考试二级C语言上机题库完全版( ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了基于c语言的mcs51单片机定时器计数器的应用教程,包括定时器的设置和计数方法,以及中断函数的使用。同时介绍了定时器应用的举例,包括定时器中断函数的编写和频率值的计算方法。主函数中设置了T0模式和T1计数的初值,并开启了T0和T1的中断,最后启动了CPU中断。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
author-avatar
3号仔小麦
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有