关于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