2023王道C语言督学营(单链表的存储原理及实现)

链表的链式存储

2023王道C语言督学营(单链表的存储原理及实现)_第1张图片
头文件

#define  _CRT_SECURE_NO_WARNINGS
#include
#include

头结点2023王道C语言督学营(单链表的存储原理及实现)_第2张图片

链表的定义

typedef struct LNode
{	int data;
	struct LNode* next;
}*LinkList ,LNode;

2023王道C语言督学营(单链表的存储原理及实现)_第3张图片

头插法建立单链表

//头插法建立单链表
void CreateLink1(LinkList& L)
{
	//带头结点的单链表
	L = (LinkList)malloc(sizeof(LNode));
	L->next = NULL;
	LNode* m;
	int x;
	scanf("%d", &x);
	while (x != 999)
	{
		m = (LNode*)malloc(sizeof(LNode));
		m->data = x;
		//s->next 整体是访问结构体空间的一个成员
		m->next = L->next;
		L->next = m;
		scanf("%d", &x);
	}
}

尾插法建立单链表

//尾插法创建单链表
void CreateLink2(LinkList& L)
{
	L =(LinkList)malloc(sizeof(LNode));
	//L->next = NULL;
	LNode* s,*r=L;
	int x;
	scanf("%d", &x);
	while (x != 999)
	{
		s = (LNode*)malloc(sizeof(LNode));
		s->data = x;
		r->next = s;
		r= s;//r指向新的表尾节点
		scanf("%d", &x);
	}
	r->next = NULL;
}

插入节点操作

2023王道C语言督学营(单链表的存储原理及实现)_第4张图片

//插入节点操作
void insertLink(LinkList& L, int n,int e)
{
	LNode* s;
	LNode* p=searchNode1(L, 2);
	s = (LNode*)malloc(sizeof(LNode));
	s->data = e;
	//p->next访问的是结构体空间的一个成员
	s->next = p->next;
	p->next = s;
}

打印链表[print()]

void printLink1(LinkList L)
{	
	L = L->next;
	while (L)
	{
		printf("%d  ",L->data);
		L = L->next;
	}
}

按序号查找节点的值[searchNode1()]

2023王道C语言督学营(单链表的存储原理及实现)_第5张图片

//按序号查找节点的值
LNode* searchNode1(LinkList L, int i)
{
	int j = 1;
	LNode* p = L->next;
	if (i == 0)
	{
		return L;
	}
	if (i < 1)
	{
		return NULL;//若i无效,则返回NULL
	}
	if (p && j < i)
	{
		p = p->next;
		j++;
	}
	return p;//返回第i个节点的指针,若i大于表长,则返回NULL
}

按值查找节点的操作[searchNode2()]

2023王道C语言督学营(单链表的存储原理及实现)_第6张图片

//按值查找节点的操作
LNode* searchNode2(LinkList L, int e)
{
	LNode* p = L->next;
	int i = 1;
	while (p != NULL && p->data!=e)
	{
		p = p->next;
		i++;
	}
	printf("按值查找的序号为:%d\n", i);
	return p;
}

删除节点

2023王道C语言督学营(单链表的存储原理及实现)_第7张图片

主函数

int main()
{
	//LinkList L1;
	//头插法创建单链表
	//CreateLink1(L1);
	//printLink1(L1);

	LinkList L2;
	//尾插法创建单链表
	CreateLink2(L2);
	printLink1(L2);

	LNode* m;
	//按序号查找节点的值
	m = searchNode1(L2, 2);
	printf("节点的值为:%d", m->data);

	//按值查找表节点
	LNode* n;
	n = searchNode2(L2, 54);

	//擦汗如节点操作
	//操作链表,插入位置,插入值。插入2之后
	insertLink(L2,2,32);
	printLink1(L2);
	return 0;
}

输出结果为:
2023王道C语言督学营(单链表的存储原理及实现)_第8张图片

你可能感兴趣的:(2023王道C语言督学营,c语言,链表,数据结构)