生活随笔
收集整理的這篇文章主要介紹了
顺序表中有效元素的长度_408数据结构之顺序表进阶(1)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
此文章系列為保存考研復習時的所有代碼
順序表進階:
- 從順序表中刪除具有最小值的元素(假設唯一)并有函數返回被刪元素的值,空出的位置由最后一個元素填補,若順序為空則顯示錯誤信息并退出運行:
bool DeleteSqlistMin(Seqlist *p,int * x )
{if(p->size==0)return false;int min=p->array[0];int i=0;int temp=0;for(i=0;i<p->size;i++){if(min>p->array[i]){min=p->array[i];temp=i;}}p->array[temp]=p->array[p->size-1];p->size--;//這里答案上寫了要刪除最后一項,但根據題意,本人認為無傷大雅return true;
}
- 設計一個高效算法,將順序表L的所有元素逆置,要求算法的空間復雜度為O(1):
bool ReverseSqlist(Seqlist *L)//由于題目只要求了空間復雜度,所以剛拿到題目就想到了用雙循環冒泡法
{if(L->size==0)return false;int temp=0;int i=0;int j=0;for(i=0;i<L->size-1;i++)for(j=0;j< L->size-i-1;j++){ temp=L->array[j]; L->array[j]=L->array[j+1];L->array[j+1]=temp;}return true;
}bool ReverseSqlist2(Seqlist *L)//標答給出的折半互換法
{if(L->size==0)return false;int temp=0;int i=0;for(i=0;i<=L->size/2;i++){ temp=L->array[i]; L->array[i]=L->array[L->size-i-1];L->array[L->size-i-1]=temp;}return true;
}
- 對長度為n的順序表L,編寫一個時間復雜度為O(n),空間復雜度為O(1)的算法,該算法刪除線性表中所有值為x的數據元素:
bool DeleteElem(Seqlist * L,int x )
{if(L->size==0)return false;int count= 0;int distance =0;int i=0;for(i=0;i<L->size-1;i++){if(L->array[i]==x){count++;}elseL->array[i-count]=L->array[i];}L->size-=count;return true;
}
- 從有序順序表中刪除旗幟在給定值s與t之間(s<t)的所有元素,如果不合理則顯示錯誤信息并退出運行:
bool DelteBtwElem(Seqlist * L,int s,int t )
{int count_s=0;int count_t=0;for(int i = 0;i<L->size;i++){if(L->array[i]==s){count_s=i;break;}else if(L->array[i]!=s&&i==L->size-1){ printf("can not found s! n");return false;}}for(int i = 0;i<L->size;i++){if(L->array[i]==t&& (L->array[i+1]>L->array[i]||i==L->size-1)){count_t=i;break;}else if(L->array[i]!=t&&i==L->size-1){ printf("can not found t! n");return false;}}for(int i = count_t ; i<L->size;i++){L->array[i- count_s -2]=L->array[i+1];}L->size-= count_t - count_s +1;return true;
}
總結
以上是生活随笔為你收集整理的顺序表中有效元素的长度_408数据结构之顺序表进阶(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。