链表的插入、删除、排序、追加等源码

#include <stdio.h>
#include <stdlib.h>




typedef struct manage
{
int num;
int name;
struct manage *next;
}STU;


STU *creat_link(int num)
{
STU *head,*pf,*pb;
int i;

for(i=0;i<num;i++)
{
pb=(STU *)malloc(sizeof(STU));
printf("please in intermation\n");
scanf("%d %d",&pb->num,&pb->name);
if(i==0)
{
head=pf=pb;
}
else

pf->next=pb;
pf=pb;
}
}

pb->next=NULL;
return (head);
}
STU *delete_link(STU *head,int num)
{
int flag=0;
STU *pf;
STU *temp=head;
while(temp!=NULL)
{
if(num==temp->num)
{
flag=1;
if(temp==head)
{
head=head->next;
}
  else if(temp->next==NULL)
{
pf->next=NULL;

}
else
{
pf->next=temp->next;
}
free(temp);
break;
}
pf=temp;
temp=temp->next;
}
return head;
}
void print_all(STU *head)
{
while(head!=NULL)
{
printf("%d%d\n",head->num,head->name);
head=head->next;
}






}
STU *add_link(STU *head,STU *p_new)
{
STU *temp=head;
if(temp!=NULL)
{
while(temp->next!=NULL)
{
temp=temp->next;
}
temp->next=p_new;
}
else
{
temp=p_new;
}
p_new->next=NULL;
return (head);

}
STU* insert_body(STU *head,STU *p_new)
{
STU *temp=head,*pf;
int flag=0;
if(temp!=NULL)
{
while(temp!=NULL)
{
if(p_new->num<temp->num)
{
if(temp==head)
{
p_new->next=head;
head=p_new;
}
else 
{
pf->next=p_new;
p_new->next=temp;
}
flag=1;
break;
}
pf=temp;
temp=temp->next;
}
if(flag==0)
{
pf->next=p_new;
p_new->next=NULL;
}
}
else
{
head=p_new;
p_new->next=NULL;
}
return head;

void bublle_link(STU *head)
{
STU *temp=head,*temp_n,*current,change;
while(temp->next!=NULL)
{
temp_n=temp->next;
while(temp_n->next!=NULL)
{
if(temp->num>temp_n->num)
{
change=*temp;
*temp=*temp_n;
*temp_n=change;
current=temp->next;
temp->next=temp_n->next;
temp_n->next=current;
}
temp_n=temp_n->next;
}
temp=temp->next;
}




}


int main(void)
{
STU *head=NULL,*p,*p_new;
int n,num;
printf("please in link count\n");
scanf("%d",&n);
head=creat_link(n);
print_all(head);

printf("please add information\n");
p_new=(STU *)malloc(sizeof(STU));
scanf("%d%d",&p_new->num,&p_new->name);
add_link(head,p_new);
print_all(head);


printf("please input delete num\n");
scanf("%d",&num);
delete_link(head,num);
print_all(head);

printf("please input insert information");
p_new=(STU *)malloc(sizeof(STU));
scanf("%d%d",&p_new->num,&p_new->name);
insert_body(head,p_new);
print_all(head);

bublle_link(head);
print_all(head);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值