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

任意位置删除:

复制代码
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);

运行截图:

相关推荐
Genevieve_xiao2 小时前
【数据结构】【xjtuse】八股文单元小测
数据结构·算法
想唱rap4 小时前
Linux下进程的状态和优先级
linux·运维·服务器·开发语言·数据结构·算法
Croa-vo5 小时前
逆袭Akuna Quant!美硕秋招亲历,从网申到拿offer全攻略
数据结构·经验分享·算法·面试·职场和发展
vir027 小时前
交换瓶子(贪心)
数据结构·算法
墨染点香8 小时前
LeetCode 刷题【160. 相交链表】
算法·leetcode·链表
YoungHong19928 小时前
面试经典150题[066]:分隔链表(LeetCode 86)
leetcode·链表·面试
952368 小时前
数据结构-二叉树
java·数据结构·学习
HUTAC8 小时前
重要排序算法(更新ing)
数据结构·算法
冉佳驹8 小时前
数据结构 ——— 八大排序算法的思想及其实现
c语言·数据结构·排序算法·归并排序·希尔排序·快速排序·计数排序
Hello_Embed9 小时前
FreeRTOS 入门(四):堆的核心原理
数据结构·笔记·学习·链表·freertos·