機電之家資源網
單片機首頁|單片機基礎|單片機應用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
結構與聯合
結構與聯合
 更新時間:2008-8-19 14:07:17  點擊數:572
【字體: 字體顏色
 
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);
   printf("Input the deleted number: ");
   scanf("%d",&num);
   head=delete(head,num);
   print(head);
   printf("Input the inserted number and age: ");
   pnum=(TYPE *)malloc(LEN);
   scanf("%d%d",&pnum->num,&pnum->age);
   head=insert(head,pnum);
   print(head);
}
  本例中,print函數用于輸出鏈表中各個結點數據域值?男尾蝖ead的初值指向鏈表第一個結點。在while語句中,輸出結點值后,head值被改變,指向下一結點。若保留頭指針head, 則應另設一個指針變量,把head值賦予它,再用它來替代head。在main函數中,n為建立結點的數目, num為待刪結點的數據域值;head為指向鏈表的頭指針,pnum為指向待插結點的指針。 main函數中各行的意義是:
第六行輸入所建鏈表的結點數;
第七行調creat函數建立鏈表并把頭指針返回給head;
第八行調print函數輸出鏈表;
第十行輸入待刪結點的學號;
第十一行調delete函數刪除一個結點;
第十二行調print函數輸出鏈表;
第十四行調malloc函數分配一個結點的內存空間, 并把其地址賦予pnum;
第十五行輸入待插入結點的數據域值;
第十六行調insert函數插入pnum所指的結點;
第十七行再次調print函數輸出鏈表。
  從運行結果看,首先建立起3個結點的鏈表,并輸出其值;再刪103號結點,只剩下105,108號結點;又輸入106號結點數據, 插入后鏈表中的結點為105,106,108。聯合“聯合”也是一種構造類型的數據結構。 在一個“聯合”內可以定義多種不同的數據類型, 一個被說明為該“聯合”類型的變量中,允許裝入該“聯合”所定義的任何一種數據。 這在前面的各種數據類型中都是辦不到的。例如, 定義為整型的變量只能裝入整型數據,定義為實型的變量只能賦予實型數據。
  在實際問題中有很多這樣的例子。例如在學校的教師和學生中填寫以下表格: 姓 名 年 齡 職 業(yè) 單位 “職業(yè)”一項可分為“教師”和“學生”兩類。對“單位”一項學生應填入班級編號,教師應填入某系某教研室。 班級可用整型量表示,教研室只能用字符類型。要求把這兩種類型不同的數據都填入“單位”這個變量中, 就必須把“單位”定義為包含整型和字符型數組這兩種類型的“聯合”。 
  “聯合” 與“結構”有一些相似之處。但兩者有本質上的不同。在結構中各成員有各自的內存空間, 一個結構變量的總長度是各成員長度之和。而在“聯合”中,各成員共享一段內存空間, 一個聯合變量的長度等于各成員中最長的長度。應該說明的是, 這里所謂的共享不是指把多個成員同時裝入一個聯合變量內, 而是指該聯合變量可被賦予任一成員值,但每次只能賦一種值, 賦入新值則沖去舊值。如前面介紹的“單位”變量, 如定義為一個可裝入“班級”或“教研室”的聯合后,就允許賦予整型值(班級)或字符串(教研室)。要么賦予整型值,要么賦予字符串,不能把兩者同時賦予它。聯合類型的定義和聯合變量的說明一個聯合類型必須經過定義之后, 才能把變量說明為該聯合類型。

  • 上一篇: 可編程模擬器件原理與開發(fā)
  • 下一篇: 與蜂共舞—ZigBee技術一瞥
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網友評論:(只顯示最新5條。)
    關于我們 | 聯系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務100強網站

    網站經營許可證:浙B2-20080178-1