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

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

2013-11-15 15:26:02  來源: 數據結構 
       要求同試對單鏈表編寫求C的算法

  解

  // 將AB求交後的結果放在C表中並刪除B表

  Status ListCross_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{

  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;

  }

  題的條件作以下兩點修改對順序表重新編寫求得表C的算法

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

  () 利用A表空間存放表C

  解

  ()

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

  Status ListCrossDelSame_Sq(SqList &ASqList &BSqList &C)

  {

  int i=j=k=;

  while(i<Alength && j<Blength){

  if(Aelem[i]<Belem[j])i++;

  else

  if(Aelem[i]>Belem[j])j++;

  else{

  if(Clength==){

  ListInsert_Sq(CkAelem[i]);

  k++;

  }

  else

  if(Celem[Clength]!=Aelem[i]){

  ListInsert_Sq(CkAelem[i]);

  k++;

  }

  i++;

  }

  }

  return OK;

  }

  ()

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

  Status ListCrossDelSame_Sq(SqList &ASqList &B)

  {

  int i=j=k=;

  while(i<Alength && j<Blength){

  if(Aelem[i]<Belem[j])i++;

  else

  if(Aelem[i]>Belem[j])j++;

  else{

  if(k==){

  Aelem[k]=Aelem[i];

  k++;

  }

  else

  if(Aelem[k]!=Aelem[i]){

  Aelem[k]=Aelem[i];

  k++;

  }

  i++;

  }

  }

  Alength=k;

  return OK;

  }

[]  []  []  


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