数据结构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;
}
}