链表学习

发布时间:2022-06-20 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了链表学习脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

链表学习

先不整理了,好复杂。

思路全部来自于

关于链表,看这一篇就够了!(新手入门

老师讲的一句也听不懂

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>//使用bool类型
//创建链表(创建结构体 包含数据和指针域)
struct lianbiao{
	int score;
	struct lianbiao *next
};

tyPEdef struct lianbiao* linklist;//typedef xx 定义名称1 *定义名称2    *定义名称2表示定义一种数据类型是指向lianbiao的指针

//链表初始化(分配动态内存空间,创建头节点。)
void chushihua(linklist* L)
{
	*L = (linklist)malloc(sizeof(lianbiao));
	(*L)->next = NULL;
}

//判断链表是否为空(判断头结点指针域是否为空)
bool emptylist(linklist L)
{
	if (L->next)
		return false;//返回false则链表不为空
	else
		return true;
}

//返回链表元素个数(从第一个指针依次后移,直到指针为空,用一个变量从0递增计数)
int lengthlist(linklist L)
{
	int i = 0;
	linklist p = L->next;
	//表示定义p为链表的第一个节点 L->即为链表第一个节点
	while (p)
	{
		i++;
		p = p->next;
	}
	return (i);
}

//清空列表 (方法和返回元素个数类似,依次后移依次清除)
//定义两个q p,另q等于头结点,p=p->next;清空q,再循环,每次用while(p)来判断是否清零完毕
void clearlist(linklist L)
{
	linklist p,q;
	q = L->next;
	while (q)
	{
		p = q->next;
		free(q);
		q = p;
	}
	L->next = NULL;
}

//返回给定位置的元素值(依次后移,直到指定位置,判断是否为空,不为空直接返回其值)
int givenum(linklist L, int i, int* s)
{
	int cnt = 1;
	linklist p = L->next;
	while (p && cnt < i)//p不为空且cnt还小于i时就能进行
	{
		p = p->next;
		cnt++;
	}
	if (!p)
		return 0;
	*s = p->score;
	return 1;
}

//查找数据(工作指针后移)
int seArchlist(linklist L, int* s)
{
	int i = 0;
	linklist p = L->next;
	while (p)
	{
		i++;
		if (p->score == s)
			return i;
	}
	return 0;
}

//删除元素
/*节点指针依次后移,到指定位置后,如果节点不为空,返回其数据域。释放该节点前
,要将前一个节点的指针指向该删除节点的后继元素。*/
int deletelink(linklist L, int i)
{
	int cnt = 1;
	linklist p, q;
	p = L->next;//L->next为第一个节点,对应cnt为1
	while (p->next &amp;& cnt < i)
	{
		p = p->next;
		cnt++;
	}
	if (!(p->next))//p->next是要删除的节点
		return 0;
	q = p->next;//此时q为被删除节点本身,p为被删除节点前一个节点
	p->next = q->next;//将被删除的节点前一个节点指针域指向后一个节点
	free(q);
	return 1;
}

//插入元素(和删除节点思路类似)
int insertlist(linklist L, int i, int* s)
{
	linklist p, q;
	int cnt = 1;
	p = L->next;
	while (p && cnt < i)
	{
		cnt++;
		p = p->next;
	}
	if (!p)
		return 0;
	q = (linklist)malloc(sizeof(lianbiao));//初始化要开辟的节点q
	q->score = s;//为q赋值
	q->next = p->next;//另q的指针域指向P的下一个节点,因为q插在P和下一个节点之间
	p->next = q;
}

脚本宝典总结

以上是脚本宝典为你收集整理的链表学习全部内容,希望文章能够帮你解决链表学习所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。