浅谈单链表
本蒟蒻终于学到链表了(还是看不到大佬的尾灯),迫不及待来展示一下了
1.单链表基本概念
通过结构体创建一个链表~~
(头文件:<stdio.h>和<stdlib.h>)
typedef int Datatype;
typedef struct Node
{
Datatype data;
struct Node *next;
} Node, *Linklist;
每个元素都是一个“结点”
每个结点都有两部分:
1.用户需要的实际数据;
2.下一个结点的地址;
表头:存放第一个结点地址
表尾:它的地址存放NULL
创建链表
到了非常重要的一步咯
创建链表一般有两种方法:头插法和尾插法
头插法
头插法非常鲜明的一个特点就是主要执行代码有两步代码
但是最后结果是倒序的~~
Linklist Creat_Head()
{
Linklist L;
Node *pNew;
int x;
L = (Linklist)malloc(sizeof(Node));
L->next = NULL;
scanf("%d", &x);
while (x != -1)
{
pNew = (Node *)malloc(sizeof(Node));
pNew->data = x;
pNew->next = L->next;
L->next = pNew;
scanf("%d", &x);
}
return L;
}
尾插法
尾插法有三步重要代码,但是结果是正序的~~
Linklist Creat_Tail()
{
Linklist L;
Node *pNew, *r;
int x;
L = (Linklist)malloc(sizeof(Node));
L->next = NULL;
r = L;
scanf("%d", &x);
while (x != -1)
{
pNew = (Node *)malloc(sizeof(Node));
pNew->data = x;
pNew->next = r->next;
r = pNew;
scanf("%d", &x);
}
r->next = NULL;
return L;
}
插入元素~~
void Inslist(Linklist L, Node *p, Datatype e)
{
Node *pNew;
pNew = (Node *)malloc(sizeof(Node));
pNew->data = e;
pNew->next = p->next;
p->next = pNew;
}
获得单链表的长度
int ListLengh(Linklist L)
{
int count = 0;
Node *p;
p = L->next;
while (p)
{
count++;
p = p->next;
}
return count;
}
链表内查找
Node *Search_x(Linklist L, Datatype x)
{
Node *p;
p = p->next;
while (p)
{
if (p->data != x)
p = p->next;
else
break;
}
if (p == NULL)
printf("没找到");
return p;
}
删除结点
void DelList(Linklist L, Node *p)
{
Node *pre;
pre = L->next;
while (pre->next != p)
pre = pre->next;
pre->next = p->next;
free(p);
}
目前本蒟蒻就学了这么多,后面还会更新更多的知识滴~~