【C语言】链表的使用及链表的实现原理

简介: 【C语言】链表的使用及链表的实现原理

🚀 作者 :“大数据小禅”


🚀 粉丝福利 :加入小禅的大数据社群


🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬


链表是什么?

1.逻辑结构上⼀个挨⼀个的数据,在实际存储时,并没有像顺序表那样也相互紧挨着。恰恰相

反,数据随机分布在内存中的各个位置,这种存储结构称为线性表的链式存储。


2.由于分散存储,为了能够体现出数据元素之间的逻辑关系,每个数据元素在存储的同时,要

配备⼀个指针,⽤于指向它的直接后继元素,即每⼀个数据元素都指向下⼀个数据元素


** 本身的信息,称为“数据域” **


** 指向直接后继的指针,称为“指针域”。指向NULL(空))。


下面是一个单链表的实现过程


#include <stdio.h>
#include <stdlib.h>
#include <string.h>                 //结构体是⼀种⼯具,⽤这个⼯具可以定义⾃⼰的数据类型
typedef struct
{
 char Num[10];//学号
 char Name[20];//姓名
} Student;
typedef struct tagNode            
{                                        
 Student Stu;                   
 struct tagNode *pNext;     
} Node;
//定义链表的第⼀个学⽣,即学⽣单链表的头结点
Node *head = NULL;  
void printfNode()                                           //遍历元素
{
 Node *node = head;   //为了不去破坏那个本来的head,重新定义一个node指针变量。
 while(node !=NULL)
 {
 printf("Num:%s,Name:%s\n",node->Stu.Num,node->Stu.Name);
 node = node->pNext;    //node等于下一个节点,一直遍历下去
 }
}
void addNode(Node *node)      
{                
 node->pNext = NULL;    //如果只是一个Node,那就是一个元素,你只知道他的数据,并不知道怎么去访问这个数据
 if(head == NULL)
 {
 head = node;    //一开始没有任何节点,那么传入的节点作为头结点
 }
 else
 {
 Node *p = head;                          
 while(p != NULL && p->pNext !=NULL)       //,获取最后一个节点的位置,跳出循环的那时候是最后一个节点,判断后继节点是否为空
 {
 p = p->pNext;
 }
 p->pNext=node;      //下一个指针域指向新节点
 }
}
int main()
{
 Node *p1 = (Node*)malloc(sizeof(Node));    //malloc在 <stdlib.h> 里面,给p1分配一个内存。  这里p1换成node输出一样
 strcpy(p1->Stu.Num,"123");    //给p1赋值
 strcpy(p1->Stu.Name,"louis");
 Node *p2 = (Node*)malloc(sizeof(Node));
 strcpy(p2->Stu.Num,"124");
 strcpy(p2->Stu.Name,"daniel");
 Node *p3 = (Node*)malloc(sizeof(Node));
 strcpy(p3->Stu.Num,"125");
 strcpy(p3->Stu.Name,"xd");
 addNode(p1);
 addNode(p2);
 addNode(p3);
 printfNode();
 return 0;
}
输出:
Num:123,Name:louis
Num:124,Name:daniel
Num:125,Name:xd

image.png


相关文章
|
存储 缓存 前端开发
【数据结构/C语言】深入理解 双向链表
【数据结构/C语言】深入理解 双向链表
C语言里的循环链表
C语言里的循环链表
|
10月前
|
存储 算法 C语言
【C语言】深入浅出:C语言链表的全面解析
链表是一种重要的基础数据结构,适用于频繁的插入和删除操作。通过本篇详细讲解了单链表、双向链表和循环链表的概念和实现,以及各类常用操作的示例代码。掌握链表的使用对于理解更复杂的数据结构和算法具有重要意义。
2919 6
|
11月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
282 5
|
11月前
|
存储 C语言
【数据结构】手把手教你单链表(c语言)(附源码)
本文介绍了单链表的基本概念、结构定义及其实现方法。单链表是一种内存地址不连续但逻辑顺序连续的数据结构,每个节点包含数据域和指针域。文章详细讲解了单链表的常见操作,如头插、尾插、头删、尾删、查找、指定位置插入和删除等,并提供了完整的C语言代码示例。通过学习单链表,可以更好地理解数据结构的底层逻辑,提高编程能力。
805 4
|
12月前
|
存储 缓存 C语言
C语言:链表和数组有什么区别
C语言中,链表和数组是两种常用的数据结构。数组是一种线性结构,元素在内存中连续存储,通过下标访问,适合随机访问且大小固定的情况。链表由一系列不连续的节点组成,每个节点存储数据和指向下一个节点的指针,适用于频繁插入和删除操作的场景,链表的大小可以动态变化。
|
12月前
|
自然语言处理 编译器 Linux
C语言中抽象的编译和链接原理
C语言中抽象的编译和链接原理
87 1
|
12月前
|
C语言
无头链表再封装方式实现 (C语言描述)
如何在C语言中实现无头链表的再封装,包括创建节点和链表、插入和删除操作、查找和打印链表以及销毁链表的函数。
96 0
|
12月前
|
C语言
C语言链式结构之有头单链表再封装写法
本文介绍了如何使用C语言对有头单链表进行封装,包括节点的创建、链表的初始化、数据的插入和删除,以及链表的打印等功能。
92 1
|
12月前
|
C语言
C语言结构体链式结构之有头单链表
文章提供了一个C语言实现的有头单链表的完整代码,包括创建链表、插入、删除和打印等基本操作。
133 1