关于C语言中链表的操作
以下是C语言中函数对链表各结点数据进行排序,交换各结点的值
#include<stdio.h>
#include<malloc.h>
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
int num;
float score;
struct student *next;
};
////////////////////////////////////
//以下函数进行输入初始数据,组成链表
struct student *creat(void)
{
struct student *p1,*p2,*head;
p1=p2=(struct student *)malloc(LEN);
head=NULL;
scanf("%d%f",&p1->num,&p1->score);
while(p1->num!=0)
{
if(head==NULL)
head=p1;
else
{
p2->next=p1;
p2=p1;
}
p1=(struct student *)malloc(LEN);
scanf("%d%f",&p1->num,&p1->score);
}
p2->next=NULL;
return head;
}
////////////////////////////////////////////
//以下函数对已存在链表数据进行打印到屏幕操作
void print(struct student *head)
{
struct student *p;
if(head==NULL)
printf("nothing has print\n");
else
{
p=head;
printf("\tnum\tscore\n");
while(p!=NULL)
{
printf("\t%d\t%.1f\n",p->num,p->score);
p=p->next;
}
}
}
/////////////////////////////////////////////////////////////////
//以下函数对链表各结点数据进行排序,利用冒排序法,交换各结点的值。
struct student *order(struct student *head)
{
struct student *p1,*p2,*p;
int num;
float score;
p=head;
while(p!=NULL)
{
p1=head;
p2=p1->next;
while(p2!=NULL)
{
if(p1->num>p2->num)
{
num=p1->num;
score=p1->score;
p1->num=p2->num;
p1->score=p2->score;
p2->num=num;
p2->score=score;
}
p1=p2;
p2=p2->next;
}
p=p->next;
}
return head;
}
////////////////////////////////////////////////////////////////
//以下函数对链表进行插入,并插入到适当位置,(链表为从小到大排列)
/*
struct student *increase(struct student *head)
{
struct student *p1,*p2,*p;
p=(struct student*)malloc(LEN);
p1=head;
p2=p1->next;
scanf("%d%f",&p->num,&p->score);
if(p->num<head->num)
{
p->next=head;
head=p;
}
else
while(p2!=NULL)
{
if(p2->num>p->num)
{
p->next=p2;
p1->next=p;
goto end;
}
p1=p2;
p2=p2->next;
}
if(p2==NULL)
{
p1->next=p;
p->next=NULL;
}
end:
return head;
}
*/
//////////////////////////////////////////////////////////////////////////
//以下函数依然对链表进行插入操作,默认插入到首位置,再调到排序函数进行排序
struct student *increase1(struct student *head)
{
struct student *p;
p=(struct student*)malloc(LEN);
scanf("%d%f",&p->num,&p->score);
p->next=head;
return order(head=p);
}
///////////////////////////////////////////////////////////////////////////
//主函数
main()
{
struct student *head;
head=creat();
head=order(head);
print(head);
print(increase1(head));
printf("please input the num for delete:\n");
print(delet(head));
}
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |