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

Posted 大数据小禅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于C语言链表的使用及链表的实现原理的主要内容,如果未能解决你的问题,请参考以下文章

c语言!!!程序设计:建立一个学生信息链表,包括学号,姓名,成绩.(实现添加,删除,查询,排序,平均)

用C语言写一个链表储存学生信息

C语言链表问题

字符串及链表的应用:例题

C语言链表问题,作业编程。编好出现问题。高手看下。

C语言实现链表的逆序打印