LOGO
首页 小说列表 排行榜 搜索

    C语言教程-第39页

  • 第1页
  • 上一页
  • 下一页

    温馨提醒:系统正在全面升级。您可以访问最新站点。谢谢!

      pi->next=NULL;}

      else

      {

      while((pi->num>pb->num)&&(pb->next!=NULL))

      {pf=pb;

      pb=pb->next; }/*找插入位置*/

      if(pi->num<=pb->num)

      {if(head==pb)head=pi;/*在第一结点之前插入*/

      else pf->next=pi;/*在其它位置插入*/

      pi->next=pb; }

      else

      {pb->next=pi;

      pi->next=NULL;} /*在表末插入*/

      }

      return head;}

        本函数有两个形参均为指针变量,head指向链表,pi 指向【创建和谐家园】结点。函数中首先判断链表是否为空,为空则使head指向【创建和谐家园】结点。表若不空,则用while语句循环查找插入位置。找到之后再判断是否在第一结点之前插入,若是则使head 指向【创建和谐家园】结点【创建和谐家园】结点指针域指向原第一结点,否则在其它位置插入, 若插入的结点大于表中所有结点,则在表末插入。本函数返回一个指针, 是链表的头指针。 当插入的位置在第一个结点之前时, 插入的新结点成为链表的第一个结点,因此head的值也有了改变, 故需要把这个指针返回主调函数。

      [例7.14]将以上建立链表,删除结点,插入结点的函数组织在一起,再建一个输出全部结点的函数,然后用main函数调用它们。

      #define NULL 0

      #define TYPE struct stu

      #define LEN sizeof(struct stu)

      struct stu

      {

      int num;

      int age;

      struct stu *next;

      };

      TYPE * creat(int n)

      {

      struct stu *head,*pf,*pb;

      int i;

      for(i=0;i

      {

      pb=(TYPE *)malloc(LEN);

      printf("input Number and Age\n");

      scanf("%d%d",&pb->num,&pb->age);

      if(i==0)

      pf=head=pb;

      else pf->next=pb;

      pb->next=NULL;

      pf=pb;

      }

      return(head);

      }

      TYPE * delete(TYPE * head,int num)

      {

      TYPE *pf,*pb;

      if(head==NULL)

      { printf("\nempty list!\n");

      goto end;}

      pb=head;

      while (pb->num!=num && pb->next!=NULL)

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

      if(pb->num==num)

      { if(pb==head) head=pb->next;

      else pf->next=pb->next;

      printf("The node is deleted\n"); }

      else

      free(pb);

      printf("The node not been found!\n");

      end:

      return head;

      }

      TYPE * insert(TYPE * head,TYPE * pi)

      {

      TYPE *pb ,*pf;

      pb=head;

      if(head==NULL)

      { head=pi;

      pi->next=NULL; }

      else

      {

      while((pi->num>pb->num)&&(pb->next!=NULL))

      { pf=pb;

      pb=pb->next; }

      if(pi->num<=pb->num)

      { if(head==pb) head=pi;

      else pf->next=pi;

      pi->next=pb; }

      else

      { pb->next=pi;

      pi->next=NULL; }

      }

      return head;

      }

      void print(TYPE * head)

      {

      printf("Number\t\tAge\n");

      while(head!=NULL)

      {

      printf("%d\t\t%d\n",head->num,head->age);

      head=head->next;

      }

      }

      main()

      {

      TYPE * head,*pnum;

      int n,num;

      printf("input number of node: ");

      scanf("%d",&n);

      head=creat(n);

      print(head);

  • 第1页
  • 上一页
  • 下一页