C语言之链表 -----Day18

C语言之链表 -----Day18

  • 一.知识点整理
    • 1.链表
      • 1.1 什么是链表
      • 1.2 链表创建流程
      • 1.3 链表的插入操作
      • 1.4 双向链表的操作
  • 二.重难点(链表目前对我来说还全部都是难点,等理解之后补上总结)
    • 1.
  • 三. 自我总结

一.知识点整理

1.链表

1.1 什么是链表

  • 链表的介绍

是一种常见的重要的数据结构,是动态地进行存储分配的一种结构

  • 链表的组成

头指针:存放一个地址,该地址指向第一个元素
结点:用户需要的实际数据和链接结点的指针

1.2 链表创建流程

  • 创建链表
//创建一个结构体
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;
}

1.3 链表的插入操作

  • 相比数组来说的优点

不需要进行很多的内存操作,相对比较省事

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;
	}	
}

1.4 双向链表的操作

  • 具体操作可以参考双向链表及其用法

二.重难点(链表目前对我来说还全部都是难点,等理解之后补上总结)

1.

三. 自我总结

学完链表之后,我再一次的怀疑了人生,这玩意仿佛把我困在了迷宫里面,还没有走出来,需要多一点的时间来调整自己;感觉到了很大的压力,但是不怕,一步一步把它克服了。

你可能感兴趣的