亚洲欧洲国产欧美一区精品,激情五月亚洲色五月,最新精品国偷自产在线婷婷,欧美婷婷丁香五月天社区

      考試首頁 | 考試用書 | 培訓課程 | 模擬考場 | 考試論壇  
      全國  |             |          |          |          |          |         
        當前位置:計算機等級 > 二級考試 > C語言程序設計 > C語言輔導 > 文章內容
        

      全國計算機等級考試二級C語言入門教程(109)

      中華IT學院   【 】  [ 2016年5月10日 ]

      可編寫一個建立鏈表的函數(shù)creat。程序如下:
      #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);
      }

      在函數(shù)外首先用宏定義對三個符號常量作了定義。這里用TYPE表示struct stu,用 LEN表示 sizeof(struct stu)
      主要的目的是為了在以下程序內減少書寫并使閱讀更加方便。結構 stu定義為外部類型,程序中的各個函數(shù)均可使用
      該定義。

      creat函數(shù)用于建立一個有 n個結點的鏈表,它是一個指針函數(shù),它返回的指針指向 stu結構。在creat函數(shù)內
      定義了三個 stu結構的指針變量。head為頭指針,pf 為指向兩相鄰結點的前一結點的指針變量。pb為后一結點的指
      針變量。在 for語句內,用 malloc函數(shù)建立長度與 stu長度相等的空間作為一結點,首地址賦予pb。然后輸入結點
      數(shù)據(jù)。如果當前結點為第一結點(i==0),則把pb值 (該結點指針)賦予head和pf。如非第一結點,則把pb值賦予pf
      所指結點的指針域成員next。而 pb所指結點為當前的最后結點,其指針域賦NULL。再把pb值賦予pf以作下一次循
      環(huán)準備。

      creat函數(shù)的形參n,表示所建鏈表的結點數(shù),作為 for語句的循環(huán)次數(shù)。圖 7.4表示了 creat函數(shù)的執(zhí)行過程。

      [例 7.11]寫一個函數(shù),在鏈表中按學號查找該結點。


      TYPE * search (TYPE *head,int n)
      {
      TYPE *p;
      int i;
      p=head;
      while (p->num!=n && p->next!=NULL)
      p=p->next; /* 不是要找的結點后移一步*/
      if (p->num==n) return (p);
      if (p->num!=n&& p->next==NULL)
      printf ("Node %d has not been found!\n",n
      }


      本函數(shù)中使用的符號常量 TYPE與例 7.10的宏定義相同,等于 struct stu。函數(shù)有兩個形參,head是指向鏈表
      的指針變量,n為要查找的學號。進入 while語句,逐個檢查結點的 num成員是否等于n,如果不等于 n且指針域不等
      于NULL(不是最后結點)則后移一個結點,繼續(xù)循環(huán)。如找到該結點則返回結點指針。 如循環(huán)結束仍未找到該結點則
      輸出“未找到”的提示信息。

      [例 7.12]寫一個函數(shù),刪除鏈表中的指定結點。刪除一個結點有兩種情況:

      1. 被刪除結點是第一個結點。這種情況只需使head指向第二個結點即可。即head=pb->next。其過程如圖7.5所示。
      2. 被刪結點不是第一個結點,這種情況使被刪結點的前一結點指向被刪結點的后一結點即可。即 pf->next=pb->next。
      其過程如圖 7.6所示。
      函數(shù)編程如下:
      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)
      /*當不是要刪除的結點,而且也不是最后一個結點時,繼續(xù)循環(huán)*/
      {pf=pb;pb=pb->next;}/*pf指向當前結點,pb指向下一結點*/
      if(pb->num==num)
      {if(pb==head) head=pb->next;
      /*如找到被刪結點,且為第一結點,則使 head指向第二個結點,
      否則使 pf所指結點的指針指向下一結點*/
      else pf->next=pb->next;
      free(pb);
      printf("The node is deleted\n");}
      else
      printf("The node not been foud!\n");
      end:
      return head;
      }

      首頁 1 2 尾頁
      分享到:
      本文糾錯】【告訴好友】【打印此文】【返回頂部
      將考試網添加到收藏夾 | 每次上網自動訪問考試網 | 復制本頁地址,傳給QQ/MSN上的好友 | 申請鏈接 | 意見留言 TOP
      關于本站  網站聲明  廣告服務  聯(lián)系方式  站內導航  考試論壇
      Copyright © 2006-2017 中華考試網(Examw.com) All Rights Reserved  營業(yè)執(zhí)照