關於21王道數據結構課后代碼題的默寫(更新中)


2.2.3  P19

1.從順序表中刪除具有最小值的元素(假設唯一)並由函數返回被刪除元素的值。空出的位置由最后一個元素填補,若順序表為空則顯示出錯信息並推出運行。

Bool DeleminElem(Sqlist &L.Elemtype *e){
    //先判斷合法性
  if(L.length==0)
    return false;

    //聲明用來存放最小數據的變量
  e=L.data[0];
  int k=0;
    
    //找到最小值
  for(int i=0;i<L.length;i++){
    if(L.data[i]<e)
      e=L.data[i];
      k=i;
  }

    //填補
  L.data[k]=L.data[length-1];
  L.length--;

  return true; 
}

2.設計一個高效算法,將順序表L的所有元素逆置,要求算法的空間復雜度為O(1)。

Bool ExchangeElem(Sqlist &L){
  int c;

  //典型的交換算法   
for(int i = 0;i<L.length/2;i++){     c=L.data[i];     L.data[i]=L.data[length-1-i];     L.[length-1-i]=c;   }   return true; }

 3.對長度為n的順序表L,編寫一個時間復雜度為O(n)、空間復雜度為O(1)的算法,該算法刪除線性表中所有值為x的數據元素

bool Deletex(Sqlist &L,Element x){
  int k=0;//用來統計有多少個值為x的元素

  //統計x的個數賦給k;將順序表里的元素向前移動k個位置
  for(int i = 0;i<L.length;i++){
    if(L.data[i]==x){
      k++;
    }else{
      L.data[i-k]=L.data[i];
    }
  }

  //改變順序表的長度
  L.length=L.length-k;

  retrun true;
}

4.從有序順序表中刪除其值在給定值s與t之間(要求s<t)的所有元素,如果s或t不合理或順序表為空,則顯示出錯信息並退出運行

 

Bool DeleteSt(Sqlist &L,Element s,Element t){
  //聲明i、j來標記s、t的位置
  int i,j;

  //驗證合理性
  if(s>=t||L.length==0)
    return false;

  //找到第一個大於s的位置
  for(i=0;i<length&&L.data[i]<s;i++);

  //如果所有的值都小於s,那就返回false
  if(i>=L.length)
    return false;

  //尋找值大於t的第一個元素
  for(j=i;j<length&&L.data[i]<t;j++);

  //進行刪除填補
  for( ;j<L.length;j++){
    L.data[i]=L.data[j];
    i++;
  }

  //改變長度
  L.length=i;

  return true;
}

 5 .從順序表中刪除其值在給定值s與t之間(要求s<t)的所有元素,如果s或t不合理或順序表為空,則顯示出錯信息並退出運

bool DeleteSt(Sqlist &L,Element s,Element t){
  if(s>=t||L.length==0) return false;//判斷合理性

  int k=0;//記錄符合條件的值的個數

  //開始執行找->記錄->移位
  for(int i=0;i<L.length;i++){
    if(L.data[i]>=s&&L.data[i]<=t){
      k++;
    }else{
      L.data[i-k]=L.data[i];
    }
  }

  //改變長度
  L.length-=k;

  return true;
}

6.從有序順序表中刪除所有其值重復的元素,使表中所有元素的值均不同。

bool DelRepeat(Sqlist &L){

  if(L.length==0) return false;//判斷合理性

  //開始進行比對和移位的操作
  for(int i=0,j=i;j<L.length;j++){
    if(L.data[i] != L.data[j])
      L.data[++i] = L.data[j];
  }

  L.length=i+1;//當你改變順序表的長度時,數據元素從后往前依次被刪除

  return true;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM