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

任意位置删除:

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

运行截图:

相关推荐
小明说Java38 分钟前
常见排序算法的实现
数据结构·算法·排序算法
小熳芋6 小时前
验证二叉搜索树- python-递归&上下界约束
数据结构
不穿格子的程序员9 小时前
从零开始写算法——链表篇2:从“回文”到“环形”——链表双指针技巧的深度解析
数据结构·算法·链表·回文链表·环形链表
诺....10 小时前
C语言不确定循环会影响输入输出缓冲区的刷新
c语言·数据结构·算法
长安er11 小时前
LeetCode876/141/142/143 快慢指针应用:链表中间 / 环形 / 重排问题
数据结构·算法·leetcode·链表·双指针·环形链表
workflower11 小时前
PostgreSQL 数据库的典型操作
数据结构·数据库·oracle·数据库开发·时序数据库
仰泳的熊猫12 小时前
1140 Look-and-say Sequence
数据结构·c++·算法·pat考试
EXtreme3512 小时前
栈与队列的“跨界”对话:如何用双队列完美模拟栈的LIFO特性?
c语言·数据结构·leetcode·双队列模拟栈·算法思维
松涛和鸣12 小时前
29、Linux进程核心概念与编程实战:fork/getpid全解析
linux·运维·服务器·网络·数据结构·哈希算法