论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

关于C语言中链表的操作

文章类别:C语言程序设计 | 发表日期:2009-6-26 11:21:23

关于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));
}

视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058