数据结构2——链表实现增删改查排序

本文深入讲解了使用C语言实现链表的基本操作,包括增、删、改、查及排序等功能。通过具体代码示例,详细介绍了如何创建链表、查找元素、删除节点、插入数据以及对链表进行排序的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构2——链表实现增删改查排序

望采纳,谢谢

#include<stdio.h>
#include<stdlib.h>
typedef int elemtype;
typedef struct node{
	elemtype data;
	struct node *next;
}LinKList;
LinKList *getlink();
void looklink(LinKList *head);
int  findlink(LinKList *head,int n);
int  shanchu(LinKList *head,int n);
int  charu(LinKList *head,int n,int i);
void  paixu(LinKList *head);
int meau();
int main(){
	LinKList *head;
	int n=1;
	head=getlink();
	while(n){
		meau();
		printf("请输入操作指令:\n"); 
		scanf("%d",&n);
		if(n==1){
			printf("请输入要查找的元素:\n");
			int s;
			scanf("%d",&s);
			if(findlink(head,s))
			printf("元素 %d 在链表中的位置为 %d\n",s,findlink(head,s));
			else
			printf("链表中不存在该元素\n");
		}
		if(n==2){
			printf("请输入要删除的元素:\n");
			int r;
			scanf("%d",&r);
			shanchu(head,r);
		}
		if(n==3){
			printf("请输入要插入的元素和位置:\n");
			int ins,in;
			scanf("%d %d",&ins,&in);
			if(charu(head,ins,in))
			printf("插入成功!\n");
			else
			printf("输入位置非法,插入失败!\n"); 
		}
		if(n==4){
			paixu(head);
			printf("排序成功!\n");
		}
		if(n==5){
			looklink(head);
			printf("\n");
		}
	}
	looklink(head);
}
LinKList *getlink(){
	LinKList *head,*tail,*p;
	int n;
	head=(LinKList *)malloc(sizeof(LinKList));
	head->next=NULL;
	tail=head;
	scanf("%d",&n);
	while(n!=0){
		p=(LinKList *)malloc(sizeof(LinKList));
		p->data=n;
		tail->next=p;
		tail=p;
		p->next=NULL;
		scanf("%d",&n);
	}
	return head;
}
void looklink(LinKList *head){
	LinKList *p;
	p=head->next;
	while(p){
		printf("%d ",p->data);
		p=p->next;
	}
}
int meau(){
	printf("1.查找\n");
	printf("2.删除\n");
	printf("3.插入\n");
	printf("4.排序\n");
	printf("5.遍历\n");
	printf("0.退出\n");
}
int  findlink(LinKList *head,int n){
	LinKList *p;
	int i=1;
	p=head;
	while(p->next){
		if(p->next->data==n)
		return i;
		p=p->next;
		i++;
	}
    return 0;
}
int  shanchu(LinKList *head,int n){
	LinKList *p,*r;
	p=head;
	while(p->next->data!=n){
		p=p->next;
	}
	r=p->next;
	p->next=r->next;
	free(r);
}
int  charu(LinKList *head,int n,int i){
	LinKList *p,*s;
	s=(LinKList *)malloc(sizeof(LinKList));
	s->data=n;
	p=head;
	i=i-1;
	while(i--&&p){
		p=p->next;
	}
	if(p==NULL&&i!=0)
	return 0;
	else{
	s->next=p->next;
	p->next=s;}
	return 1;
}
void paixu(LinKList *head){
	LinKList *q,*r,*p;
	p=head->next;
	head->next=NULL;
	while(p){
		q=p;
		p=p->next;
		r=head;
		while(r->next&&r->next->data<q->data)
		r=r->next;
		q->next=r->next;
		r->next=q; 
	}
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

航霸霸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值