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

任意位置删除:

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

运行截图:

相关推荐
卑微的小鬼28 分钟前
数据库使用B+树的原因
数据结构·b树
cookies_s_s29 分钟前
Linux--进程(进程虚拟地址空间、页表、进程控制、实现简易shell)
linux·运维·服务器·数据结构·c++·算法·哈希算法
醉城夜风~2 小时前
[数据结构]双链表详解
数据结构
gyeolhada3 小时前
2025蓝桥杯JAVA编程题练习Day5
java·数据结构·算法·蓝桥杯
阿巴~阿巴~3 小时前
多源 BFS 算法详解:从原理到实现,高效解决多源最短路问题
开发语言·数据结构·c++·算法·宽度优先
刃神太酷啦4 小时前
堆和priority_queue
数据结构·c++·蓝桥杯c++组
落羽的落羽5 小时前
【落羽的落羽 数据结构篇】栈和队列
c语言·数据结构
qy发大财5 小时前
分发糖果(力扣135)
数据结构·算法·leetcode
滴_咕噜咕噜6 小时前
C#基础总结:常用的数据结构
开发语言·数据结构·c#
haaaaaaarry6 小时前
【分治法】线性时间选择问题
数据结构·算法