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语言链表的使用及链表的实现原理的主要内容,如果未能解决你的问题,请参考以下文章