熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> 數據結構 >> 正文

數據結構考研分類復習真題 第二章 答案[25]

2013-11-15 15:23:54  來源: 數據結構 

  [算法討論]因為本題並未要求鏈表中結點的數據值有序所以算法中采取最簡單方式將新結點前插到頭結點後面(即第一元素之前)

  本題同上面第除個別敘述不同外本質上完全相同故不再另作解答

  ()[題目分析]本題中的鏈表有頭結點分解成表A和表B均帶頭結點分解後的A表含有原表中序號為奇數的元素B表含有原A表中序號為偶數的元素由於要求分解後兩表中元素結點的相對順序不變故采用在鏈表尾插入比較方便這使用一指向表尾的指針即可方便實現

  void DisCreat(LinkedList A)∥A是帶頭結點的單鏈表本算法將其分解成兩個帶頭結點的單鏈表A表中含原表中序號為奇數的結點B表中含原表中序號為偶數的結點鏈表中結點的相對順序同原鏈表
  {i=;∥i記鏈表中結點的序號
  B=(LinkedList)malloc(sizeof(LNode);∥創建B表表頭
  B>next=null;∥B表的初始化
  LinkedList rarb;∥ra和rb將分別指向將創建的A表和B表的尾結點
  ra=A;rb=B;
  p=A>next;∥p為鏈表工作指針指向待分解的結點
  A>next=null;∥置空新的A表
  while(p!=null)
  {r=p>next;∥暫存p的後繼
  i++;
  if(i%==)∥處理原序號為偶數的鏈表結點
  {p>next=rb>next;∥在B表尾插入新結點;
  rb>next=p; rb=p;∥rb指向新的尾結點;
  }
  else∥處理原序號為奇數的結點
  {p>next=ra>next; ra>next=p; ra=p; }
  p=r;∥將p恢復為指向新的待處理結點
  }∥算法結束

[]  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  []  


From:http://tw.wingwit.com/Article/program/sjjg/201311/23347.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.