是一种常见的重要的数据结构,是动态地进行存储分配的一种结构
头指针:存放一个地址,该地址指向第一个元素
结点:用户需要的实际数据和链接结点的指针
//创建一个结构体
typedef struct Node
{
//1.数据域
int data;
int value;
char name[20];
//2.指针域
struct Node *next;
}NODE;
//创建头结点
NODE *CreateList()
{
NODE *head = (NODE *)malloc(sizeof(NODE));//给head分配结构体的内存
if (head == NULL)
{
exit(0);
}
head->next = NULL;
}
//增加头结点
void AddNode(NODE *head, int num)
{
NODE *pnew = (NODE *)malloc(sizeof(NODE));//给新指针分配一个结构体内存
NODE *p = head; //定义一个指向头结点的p指针
if (pnew == NULL)
{
exit(0);
}
pnew->data = num;
pnew->next = NULL;
pnew->next = head->next;
head->next = pnew;
}
void DelNode(NODE *head, int num)
{
NODE *p = head->next;
NODE *q = head;
while (p != NULL)
{
if (p->data == num)
{
q->next = p->next;
break;
}
p = p->next;
q = q->next;
}
}
void modifyNode(NODE *head, int old, int new)
{
NODE *p = head->next;
NODE *q = head;
while (p != NULL)
{
if (p->data == num)
{
p->data = new;
}
p = p->next;
}
}
void ClearLink(NODE *head)
{
if (head == NULL)
{
printf("链表已空,不需要清空!\n");
exit(0);
}
NODE *temp;
while (head != NULL)
{
temp = head;
head = head->next;
free(temp);
}
}
void DestoryLink(NODE *head)
{
if (head == NULL)
{
exit(0);
}
ClearLink(head);
free(head);
head = NULL;
}
不需要进行很多的内存操作,相对比较省事
void insertNode(NODE *head, int value)
{
NODE *previous, *current, *new;
current = head;
previous = NULL;
new = (NODE *)malloc(sizeof(NODE));
if (new == NULL)
{
printf("内存分配失败!\n");
exit(0);
}
while (cur != NULL && cur->value < value)
{
previoue = current;
current = current->next;
}
new->value = value;
new->next = current;
if (previous == NULL)
{
head = new;
}
else
{
previous->next = new;
}
}
学完链表之后,我再一次的怀疑了人生,这玩意仿佛把我困在了迷宫里面,还没有走出来,需要多一点的时间来调整自己;感觉到了很大的压力,但是不怕,一步一步把它克服了。