叠甲:
本文仅为本人一时兴起所创作,可能会含有部分错别字以及未经思考便运用的错误语言用法,请各位读者谅解;本篇文章只是个人对于链表进行的片面且极具主观性的探讨,仅代表本人的个人喜好、看法与观点,并不代表网络与现实社会中大众的想法。
链表 英文名——Linked List
一个单链表长这样,由一个个结点组成,非常形象
链表是一种数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表中的节点不需要在内存中被连续存储,可以按照需要添加或删除节点,并且可以通过遍历整个链表来访问其中的每个节点。链表通常用于实现更高级别的数据结构和算法,例如队列、栈和图。
直接上代码
typedef struct Node{
int data; //数据域
struct Node *next; //指针域
}Node,*LinkList;
//Node struct Node 的别名 LinkList struct Node *
//int int*
LinkList create(){
//动态申请空间(head指针指向这个空间)
LinkList head=(Node *)malloc(sizeof(Node));
//判断空间是否开辟成功
if(head==NULL){
printf("空间开辟失败!\n");
return NULL;
}
//头结点,指针域赋值为NULL
head->next=NULL;
//返回头结点指针
return head;
}
下面介绍如何使用链表:
1.首先需要定义一个节点结构体,包含要存储的数据和指向下一个节点的指针。
struct Node {
int data;
struct Node* next;
}Node;
2.创建链表时需要定义一个链表头节点,它的指针指向链表的第一个节点。
struct Node* head = NULL;
3.添加节点时,需要新建一个节点,并将其指针指向上一个节点的下一个节点。
struct Node* newNode = (struct Node*) malloc(sizeof(struct Node));
Node->data = 1;
Node->next = NULL;
if (!head) {
head = Node;
}
else {
struct Node* p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = Node;
}
4.遍历链表时,需要从头节点开始遍历,依次访问每个节点的数据。
struct Node* p = head;
while (!p) {
printf("%d ", p->data);
p = p->next;
}
5.删除节点时,需要将其上一个节点的指针指向其下一个节点。
struct Node* p = head;
struct Node* q = NULL;
while (p != NULL) {
if (p->data == q) {
if (q == NULL) {
head = p->next;
} else {
q->next = p->next;
}
free(p);
break;
}
q = p;
p = p->next;
}
以上是链表的基本使用方法,可以根据具体问题进行扩展和优化。
链表的小寄巧
1.理解链表的基本概念
链表是一种常见的数据结构,它的基本思想是通过指针将一组零散的内存块串联起来形成一个线性结构。在学习链表之前,需要先了解链表的基本概念,包括链表的节点、头节点、尾节点、链表长度等。
2.学习链表的实现方式
链表的实现方式有单向链表、双向链表和循环链表等。需要学习各种链表的实现方式以及它们的优缺点,选择适合自己的实现方式。
3.熟练掌握链表的操作
链表的基本操作有插入、删除、查找等。需要熟练掌握这些操作,并能够根据具体的业务场景灵活运用。
4.了解链表的应用场景
链表可以广泛应用于各种领域,例如操作系统中的进程管理、数据库中的索引等。了解链表的应用场景可以更好地理解链表的使用方法和优势。
关于链表的使用案例
-
实现一个队列 队列是一种线性数据结构,它的特点是先进先出。使用链表可以很方便地实现一个队列,只需要将链表的头作为队列的队首,链表的尾作为队列的队尾,并且保证出队时从头部出队,入队时从尾部入队。
-
实现一个栈 栈是一种线性数据结构,它的特点是后进先出。使用链表可以很方便地实现一个栈,只需要将链表的头作为栈的栈顶,并且保证入栈时从头部入栈,出栈时从头部出栈。
-
实现一个LRU缓存淘汰算法 LRU缓存淘汰算法是一种常见的缓存淘汰算法,它的基本思想是将最近最少使用的缓存块淘汰掉。使用链表可以很方便地实现LRU缓存淘汰算法,只需要将链表的头作为最近使用的缓存块,链表的尾作为最久未使用的缓存块,并且保证每次访问缓存块时将其移到链表头部。
-
实现一个图的邻接表表示 在图的表示中,邻接表是一种比较常见的表示方法。使用链表可以很方便地实现一个图的邻接表表示,只需要将每个顶点对应的链表表示其相邻的顶点,例如一个有向图的邻接表可以表示为一个顶点数组,其中每个顶点对应的链表存储其指向的顶点。
-
实现一个多项式求解器 多项式是一种常见的数学表达式,它可以使用链表很方便地进行表示。例如一个三次多项式可以表示为一个带头节点的链表,其中每个节点表示多项式的一项,节点中存储该项的系数和指数。使用链表可以很方便地实现多项式的加法、减法、乘法等操作。