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

數據結構與算法線性表復習習題【5】[3]

2022-06-13   來源: 數據結構 
       題的條件作以下兩點修改對單鏈表重新編寫求得表C的算法

  () 假設在同一表(A或B)中可能存在值相同的元素但要求新生成的表C中的元素值各不相同

  () 利用原表(A表或B表)中的結點構成表C並釋放A表中的無用結點空間

  解

  ()

  // AB求交結果放在C表中並刪除相同元素

  Status ListCrossDelSame_L(LinkList &ALinkList &BLinkList &C)

  {

  LinkList papbqaqbpt;

  pa=A;

  pb=B;

  qa=pa;// 保存pa的前驅指針

  qb=pb;// 保存pb的前驅指針

  pa=pa>next;

  pb=pb>next;

  C=A;

  while(pa&&pb){

  if(pa>data<pb>data){

  pt=pa;

  pa=pa>next;

  qa>next=pa;

  free(pt);

  }

  else

  if(pa>data>pb>data){

  pt=pb;

  pb=pb>next;

  qb>next=pb;

  free(pt);

  }

  else{

  if(pa>data==qa>data){

  pt=pa;

  pa=pa>next;

  qa>next=pa;

  free(pt);

  }

  else{

  qa=pa;

  pa=pa>next;

  }

  }

  }

  while(pa){

  pt=pa;

  pa=pa>next;

  qa>next=pa;

  free(pt);

  }

  while(pb){

  pt=pb;

  pb=pb>next;

  qb>next=pb;

  free(pt);

  }

  pb=B;

  free(pb);

  return OK;

  }

  ()

  // AB求交結果放在A表中並刪除相同元素

  Status ListCrossDelSame_L(LinkList &ALinkList &B)

  {

  LinkList papbqaqbpt;

  pa=A;

  pb=B;

  qa=pa;// 保存pa的前驅指針

  qb=pb;// 保存pb的前驅指針

  pa=pa>next;

  pb=pb>next;

  while(pa&&pb){

  if(pa>data<pb>data){

  pt=pa;

  pa=pa>next;

  qa>next=pa;

  free(pt);

  }

  else

  if(pa>data>pb>data){

  pt=pb;

  pb=pb>next;

  qb>next=pb;

  free(pt);

  }

  else{

  if(pa>data==qa>data){

  pt=pa;

  pa=pa>next;

  qa>next=pa;

  free(pt);

  }

  else{

  qa=pa;

  pa=pa>next;

  }

  }

  }

  while(pa){

  pt=pa;

  pa=pa>next;

  qa>next=pa;

  free(pt);

  }

  while(pb){

  pt=pb;

  pb=pb>next;

  qb>next=pb;

  free(pt);

  }

  pb=B;

  free(pb);

  return OK;

  }

[]  []  []  


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