2024/01/24

//head.h

#ifndef __HEAD_H__
#define __HEAD_H__

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
enum{FALSE=-1,SUCCESS};
typedef int datatype;

//定义节点结构体
typedef struct Node
{
	//数据域
	datatype data;
	//指针域
	struct Node *next;
}*Linklist;

Linklist create();
Linklist insert_head(Linklist head,datatype element);
void output(Linklist head);
Linklist insert_tail(Linklist head,datatype element);
Linklist delete_head(Linklist head);
Linklist delete_tail(Linklist head);
Linklist insert_pos(Linklist head,int pos,datatype element);
Linklist delete_pos(Linklist head,int pos);
void search_pos(Linklist head,int pos);
void modify_pos(Linklist head,int pos,datatype element);
Linklist rev(Linklist head);
void modify_rev(Linklist head,int n);
void Bubble(Linklist head);
void search__key(Linklist head,datatype key);
void modify_key(Linklist head,datatype key,datatype element);
int search_key_r(Linklist head,datatype key);
Linklist delete_key(Linklist head,datatype key);
Linklist my_free(Linklist head);


#endif

单链表按任意元素查找

参数:head,查找的元素key

返回:如果存在返回位置,失败返回-1

   1.判断是否为空

   2.循环比较,如果相等返回位置,

有返(只能查找一个)

//main.c

	//单链表任意元素查找(有返)
	datatype key;
	printf("please enter search key:");
	scanf("%d",&key); 
    datatype value=search_key_r(head,key);
	printf("%d\n",value);

//test.c

//单链表任意元素查找(有返)
int search_key_r(Linklist head,datatype key)
{
	//链表为空
	if(NULL==head)
	{
		puts("empty");
		return FALSE;
	}
	//查找
	int flag=-1;
	Linklist p=head;
	for(int i=0;i<length(head);i++)
	{
		if(key==p->data)
		{
			flag=i+1;
			break;
		}
		p=p->next;
	}
	return flag;

}

无返

//main.c

	//单链表任意元素查找
	datatype key;
	printf("please enter modify key:");
	scanf("%d",&key);
	search_key(head,key);

//test.c

//单链表任意元素查找	

void search_key(Linklist head,datatype key)
{
	//链表为空
	if(NULL==head)
	{
		puts("empty");
		return;
	}
	//循环遍历
	int flag=-1;
	Linklist p=head;
	for(int i=0;i<length(head);i++)
	{
		if(key==p->data)
		{
			flag=i+1;
			printf("%d ",flag);
		}
		p=p->next;
	
	}
	printf("\n");
	if(flag==-1)
		puts("NO!");
}

单链表按任意元素修改

参数:head,查找的值key,修改的值element

1,根据key找到位置pos

2,根据pos修改值

//main.c


	//单链表任意元素修改
	datatype key;
	printf("please enter modify key:");
	scanf("%d",&key);
	printf("please enter modify element:");
	scanf("%d",&element);
	modify_key(head,key,element);
	output(head);

//test.c

//单链表任意元素修改
void modify_key(Linklist head,datatype key,datatype element)
{
	//链表为空
	if(NULL==head)
	{
		puts("empty");
		return;
	}
	//查找
	while(search_key_r(head,key)!=-1)
	{
		//调用任意位置修改函数
		int pos=search_key_r(head,key);
		modify_pos(head,pos,element);
	}
}

单链表按任意元素删除

参数:head,查找的值key

1,根据key找到位置pos

2,根据poss删除

//main.c

	//单链表任意元素删除
	datatype key;
	printf("please enter delete key:");
	scanf("%d",&key);
	head=delete_key(head,key);
	output(head);

//test.c

//单链表任意元素删除
Linklist delete_key(Linklist head,datatype key)
{
	//链表为空
	if(NULL==head)
	{
		puts("empty");
		return NULL;
	}
	//查找
	while(search_key_r(head,key)!=-1)
	{
		//调用任意位置删除函数
		int pos=search_key_r(head,key);
	    head=delete_pos(head,pos);
	}
	return head;

}

单链表排序

//Bubble

//main.c

	//单链表排序
	Bubble(head);
	printf("Bubble:\n");
	output(head);

//test.c

//单链表排序
void Bubble(Linklist head)
{
	if(NULL==head)
		return;
	//排序
	int len=length(head);
	for(int i=1;i<len;i++)
	{
		Linklist p=head;
		for(int j=0;j<len-i;j++)
		{
			if(p->data>p->next->data)
			{
				datatype t=p->data;
				p->data=p->next->data;
				p->next->data=t;
			}
			p=p->next;//指针后移
		}
	}
}

//Simple_Sort

//main.c

	//单链表排序(简单选择)
	Simple_Sort(head);
	printf("Simple_Sort:\n");
	output(head);

//test.c

//单链表排序(简单选择)
void Simple_Sort(Linklist head)
{
	for(Linklist i=head;i->next!=NULL;i=i->next)
	{
		Linklist min=i;
		for(Linklist j=i->next;j;j=j->next)
		{
			if(min->data>j->data)
			{
				min=j;
			}
		}
		if(min!=i)
		{
			datatype t=min->data;
			min->data=i->data;
			i->data=t;
		}
	}
}

单链表释放内存

//main.c

	//单链表内存释放
	head=my_free(head);

//test.c

//单链表内存释放
Linklist my_free(Linklist head)
{
	if(NULL==head)
		return NULL;
	while(head)
	{
		Linklist p=head;
		head=head->next;
		free(p);
		p=NULL;
	}
	return head;
}

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值