数据结构,链表的简单使用

任意位置删除:

void Any_Del(LinkListPtr h,int a)//任意删
{
	if(NULL==h||a>h->len)
	{
		printf("删除失败");
	}
	LinkListPtr p=h;
	for(int i=0;i<a-1;i++)
	{
		p=p->next;
	}
	LinkListPtr p2=p;
	p2=p2->next;
	p->next=p->next->next;
	free(p2);
	p2=NULL;
	h->len--;
	return;
}

按位置修改:

void Any_Change(LinkListPtr h,DataType a,int b)//任意修改
{
	if(NULL==h||b>h->len)
	{
		printf("修改失败");
		return ;
	}
	LinkListPtr p=h;
	for(int i=0;i<b-1;i++)
	{
		p=p->next;
	}
	p->next->data=a;
	return ;
}

按值查找,返回地址

LinkListPtr search(LinkListPtr h,int  a)//按值查找,返回地址
{
	if(NULL==h||empt(h))
	{
		printf("查找失败");
		return NULL;
	}
	LinkListPtr p=h;
	while(p->next!=NULL)
	{
		if(p->data==a)
			{
				return p;
			}
		p=p->next;
	}
}

反转:

void Severse(LinkListPtr h)//反转输出
{
	if(NULL==h||empt(h))
	{
		printf("反转失败");
		return;
	}
	LinkListPtr p=h;
	LinkListPtr temp=NULL;
	while(p->next!=NULL)
	{
		p=p->next;
	}
	temp=p;
	p=h;
	for(int i=0;i<h->len-1;i++)
	{
		p=h;
		for(int j=0;j<h->len-i-1;j++)
		{
			p=p->next;
		}
		p->next->next=p;
	}
	h->next=temp;
	p->next=NULL;
	show(h);
	return;
	temp=NULL;
	p=NULL;
}

销毁:

void  My_free(LinkListPtr h)
{
	if(NULL==h)
	{
		printf("销毁失败");
		return ;
	}
	LinkListPtr p=h;
	for(int i=0;i<h->len;i++)
	{
		p=h;
		for(int j=0;j<h->len-i;j++)
		{
			p=p->next;
		}
		free(p->next);
		p=NULL;
	}
	free(h);
	h=NULL;
	p=NULL;
	printf("销毁成功\n");
	return ;
}

测试文件:main

#include "3.h"
int main()
{
	LinkListPtr h=caerte();
	empt(h);

	end_add(h,1);
	end_add(h,2);
	end_add(h,3);
	end_add(h,4);
	end_add(h,5);
	end_add(h,6);

	show(h);
	putchar(10);

	Any_Add(h,9,3);
	show(h);
	putchar(10);

	Any_Del(h,1);
	show(h);
	putchar(10);

	
	Any_Change(h,7,1);
	show(h);
	putchar(10);

	LinkListPtr p=search(h,9);
	printf("%p",p);
	putchar(10);

	Severse(h);
	putchar(10);

	My_free(h);
	h=NULL;
	return 0;
	
}

头文件引用:

#ifndef __3__
#define __3__
#include<stdio.h>
#include<stdlib.h>

#endif
typedef  int DataType;
typedef struct node
{
	union
	{
		int len;
		DataType data;
	};
		struct node *next;
}LinkList,*LinkListPtr;

LinkListPtr caerte();

int empt(LinkListPtr h);

int head_add(LinkListPtr h,DataType a);

LinkListPtr caerte_node(DataType a);

void show(LinkListPtr h);

void end_add(LinkListPtr h,DataType a);

void Any_Add(LinkListPtr h,DataType a,int b);

void Any_Del(LinkListPtr h,int a);

void Any_Change(LinkListPtr h,DataType a,int b);

LinkListPtr search(LinkListPtr h,int  a);

void Severse(LinkListPtr h);

void My_free(LinkListPtr h);

运行截图:

相关推荐
带多刺的玫瑰1 小时前
Leecode刷题C语言之k次乘运算后的数组②
c语言·数据结构·算法
殇淋狱陌1 小时前
第三章 列表(List)语法讲解
数据结构·python·学习·数据分析·list
yoyobravery2 小时前
矩阵的基本知识
c语言·数据结构·算法·矩阵
别NULL2 小时前
机试题——分配资源 ID
数据结构·算法
飞翔的煤气罐boom4 小时前
数据结构day4链表作业
数据结构·链表
Nydia.J4 小时前
【学习笔记】数据结构(八)
数据结构·考研
sahuid5 小时前
Redis 中 IntSet 底层数据结构
数据结构·数据库·redis
坊钰6 小时前
【Java 数据结构】如何写一副扑克牌 (附:全部码源) !!!
java·开发语言·前端·数据结构·学习
初学者丶一起加油6 小时前
C语言基础:数组(字符数组)
linux·c语言·开发语言·数据结构·vscode·算法·ubuntu
蒟蒻的贤6 小时前
12.11数据结构-图
数据结构·算法