首頁(yè)考試吧論壇Exam8視線考試商城網(wǎng)絡(luò)課程模擬考試考友錄實(shí)用文檔求職招聘論文下載
2013中考
法律碩士
2013高考
MBA考試
2013考研
MPA考試
在職研
中科院
考研培訓(xùn) 自學(xué)考試 成人高考
四 六 級(jí)
GRE考試
攻碩英語(yǔ)
零起點(diǎn)日語(yǔ)
職稱英語(yǔ)
口譯筆譯
申碩英語(yǔ)
零起點(diǎn)韓語(yǔ)
商務(wù)英語(yǔ)
日語(yǔ)等級(jí)
GMAT考試
公共英語(yǔ)
職稱日語(yǔ)
新概念英語(yǔ)
專四專八
博思考試
零起點(diǎn)英語(yǔ)
托?荚
托業(yè)考試
零起點(diǎn)法語(yǔ)
雅思考試
成人英語(yǔ)三級(jí)
零起點(diǎn)德語(yǔ)
等級(jí)考試
華為認(rèn)證
水平考試
Java認(rèn)證
職稱計(jì)算機(jī) 微軟認(rèn)證 思科認(rèn)證 Oracle認(rèn)證 Linux認(rèn)證
公 務(wù) 員
導(dǎo)游考試
物 流 師
出版資格
單 證 員
報(bào) 關(guān) 員
外 銷 員
價(jià)格鑒證
網(wǎng)絡(luò)編輯
駕 駛 員
報(bào)檢員
法律顧問(wèn)
管理咨詢
企業(yè)培訓(xùn)
社會(huì)工作者
銀行從業(yè)
教師資格
營(yíng)養(yǎng)師
保險(xiǎn)從業(yè)
普 通 話
證券從業(yè)
跟 單 員
秘書資格
電子商務(wù)
期貨考試
國(guó)際商務(wù)
心理咨詢
營(yíng) 銷 師
司法考試
國(guó)際貨運(yùn)代理人
人力資源管理師
廣告師職業(yè)水平
衛(wèi)生資格 執(zhí)業(yè)醫(yī)師 執(zhí)業(yè)藥師 執(zhí)業(yè)護(hù)士
會(huì)計(jì)從業(yè)資格
基金從業(yè)資格
統(tǒng)計(jì)從業(yè)資格
經(jīng)濟(jì)師
精算師
統(tǒng)計(jì)師
會(huì)計(jì)職稱
法律顧問(wèn)
ACCA考試
注冊(cè)會(huì)計(jì)師
資產(chǎn)評(píng)估師
審計(jì)師考試
高級(jí)會(huì)計(jì)師
注冊(cè)稅務(wù)師
國(guó)際內(nèi)審師
理財(cái)規(guī)劃師
美國(guó)注冊(cè)會(huì)計(jì)師
一級(jí)建造師
安全工程師
設(shè)備監(jiān)理師
公路監(jiān)理師
公路造價(jià)師
二級(jí)建造師
招標(biāo)師考試
物業(yè)管理師
電氣工程師
建筑師考試
造價(jià)工程師
注冊(cè)測(cè)繪師
質(zhì)量工程師
巖土工程師
造價(jià)員考試
注冊(cè)計(jì)量師
環(huán)保工程師
化工工程師
咨詢工程師
結(jié)構(gòu)工程師
城市規(guī)劃師
材料員考試
監(jiān)理工程師
房地產(chǎn)估價(jià)
土地估價(jià)師
安全評(píng)價(jià)師
房地產(chǎn)經(jīng)紀(jì)人
投資項(xiàng)目管理師
環(huán)境影響評(píng)價(jià)師
土地登記代理人
繽紛校園 實(shí)用文檔 英語(yǔ)學(xué)習(xí) 作文大全 求職招聘 論文下載 訪談|游戲
軟件水平考試
軟件水平考試資訊
軟件水平考試試題
軟件水平考試專項(xiàng)輔導(dǎo)
軟件水平考試交流互動(dòng)
軟件水平考試交流互動(dòng)
您現(xiàn)在的位置: 考試吧 > 軟件水平考試 > 復(fù)習(xí)資料 > 程序員資料 > 正文

C語(yǔ)言初學(xué)者入門知識(shí)之結(jié)構(gòu)體3

  1. 原表是空表,只需使head指向被插結(jié)點(diǎn)即可。

  2. 被插結(jié)點(diǎn)值最小,應(yīng)插入第一結(jié)點(diǎn)之前。這種情況下使head指向被插結(jié)點(diǎn),被插結(jié)點(diǎn)的指針域指向原來(lái)的第一結(jié)點(diǎn)則可。即:

  pi->next=pb;

  head=pi;

  3. 在其它位置插入。這種情況下,使插入位置的前一結(jié)點(diǎn)的指針域指向被插結(jié)點(diǎn),使被插結(jié)點(diǎn)的指針域指向插入位置的后一結(jié)點(diǎn)。即為:pi->next=pb;pf->next=pi;

  4. 在表末插入。這種情況下使原表末結(jié)點(diǎn)指針域指向被插結(jié)點(diǎn),被插結(jié)點(diǎn)指針域置為NULL。

  即:

  pb->next=pi;

  pi->next=NULL; TYPE * insert(TYPE * head,TYPE *pi)

  {

  TYPE *pf,*pb;

  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;/*在第一結(jié)點(diǎn)之前插入*/

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

  pi->next=pb; }

  else

  {

  pb->next=pi;

  pi->next=NULL;

  } /*在表末插入*/

  }

  return head;

  }

  本函數(shù)有兩個(gè)形參均為指針變量,head指向鏈表,pi 指向被插結(jié)點(diǎn)。函數(shù)中首先判斷鏈表是否為空,為空則使head指向被插結(jié)點(diǎn)。表若不空,則用while語(yǔ)句循環(huán)查找插入位置。找到之后再判斷是否在第一結(jié)點(diǎn)之前插入,若是則使head 指向被插結(jié)點(diǎn)被插結(jié)點(diǎn)指針域指向原第一結(jié)點(diǎn),否則在其它位置插入, 若插入的結(jié)點(diǎn)大于表中所有結(jié)點(diǎn),則在表末插入。本函數(shù)返回一個(gè)指針,是鏈表的頭指針。當(dāng)插入的位置在第一個(gè)結(jié)點(diǎn)之前時(shí), 插入的新結(jié)點(diǎn)成為鏈表的第一個(gè)結(jié)點(diǎn),因此head的值也有了改變, 故需要把這個(gè)指針?lè)祷刂髡{(diào)函數(shù)。

  [例7.14]將以上建立鏈表,刪除結(jié)點(diǎn),插入結(jié)點(diǎn)的函數(shù)組織在一起,再建一個(gè)輸出全部結(jié)點(diǎn)的函數(shù),然后用main函數(shù)調(diào)用它們。

  #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);

  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);

  }

  相關(guān)推薦:

  2012年軟考系統(tǒng)分析師考試60天完美復(fù)習(xí)計(jì)劃

  2012年軟件水平考試網(wǎng)絡(luò)工程師章節(jié)筆記講義匯總

  2012年上半年軟件水平考試成績(jī)查詢匯總

文章搜索
軟件水平考試欄目導(dǎo)航
版權(quán)聲明:如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系800@exam8.com,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請(qǐng)注明出處。