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

任意位置删除:

复制代码
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 小时前
CC1-二叉树的最小深度
java·数据结构·算法·leetcode·职场和发展
仰泳的熊猫1 小时前
LeetCode:889. 根据前序和后序遍历构造二叉树
数据结构·c++·算法
Emilia486.2 小时前
【Leetcode&nowcode&数据结构】单链表的应用(初阶)
c语言·数据结构·算法·leetcode
仰泳的熊猫2 小时前
LeetCode:700. 二叉搜索树中的搜索
数据结构·c++·算法·leetcode
杰 .3 小时前
C++ Hash
数据结构·c++·哈希算法
韧竹、4 小时前
数据结构之单链表
数据结构·链表
And_Ii4 小时前
LeetCode 3350. 检测相邻递增子数组 II
数据结构·算法·leetcode
胖咕噜的稞达鸭4 小时前
C++中的父继子承(2)多继承菱形继承问题,多继承指针偏移,继承组合分析+高质量习题扫尾继承多态
c语言·开发语言·数据结构·c++·算法·链表·c#
冷月葬花~5 小时前
day24
数据结构·算法·leetcode
仰泳的熊猫6 小时前
LeetCode:538. 把二叉搜索树转换为累加树/1038. 从二叉搜索树到更大和树
数据结构·c++·算法·leetcode