データ構造-王道の授業後題-線形表(1)

3225 ワード

順序表
1.シーケンステーブルから最小要素を削除し、その要素の値を返します.最後のビットで空白の位置を埋めます.
bool Delete_min(sqList &L, ElemType &value){
    if(L.length<=0){
        //   ,    
        return false ;
    }
    value=L.data[0];
    int pos=0;
    for(int i=0;i
 
2.順序表Lのすべての要素を逆置し、アルゴリズムの空間複雑度をO(1)とする.
//          ,                 
//              ,          
void Reverse(sqList &L){
    int i=0;
    int j=L.length-1;
    ElemType temp=0    
    for(;i>=j;i++,j++){
        temp = L.data[i];
        L.data[i] = L.data[j];
        L.data[j] = temp;    
        //      ,i,j    
    }
    /*      
    for(i=0;i
 
 3.長さnの順序表Lに対して、時間の複雑さはO(n)であり、空間の複雑さはO(1)のアルゴリズムであり、このアルゴリズムは線形表のすべての値がXのデータ要素を削除する.
bool Delete_x(sqList &L, ElemType x){
    //      ,    x   
    //    i ,  i 
    //                 
    int k=0;//  k     x   ,          
    for(int i=0;i
 4.指定された値sとtの間のすべての要素を順序表から削除し、sまたはtが不合理であれば終了する.
//    ,    s,t     t        s  
bool del_st(sqList &L,ElemType s,ElemType t){
    if(s>t||L.length==0){
        //        
        return false
    }
    int i,j;
    //  i    t        ,
    for(i;i
 5.指定されたsからtまでのすべての要素をシーケンステーブルから削除します.
//      x  ,         
bool del_st_h(sqList &L,ElemType s,ElemType t){

    int i,k=0;
    if(s>t||L.length==0){
        return false;
    }
    while(is){
            //         
            //        
            k++;
        }
        else{
            //          x
            L.data[i-k]=L.data[i];
         }
     i++;
     }
     L.length -=k;
     return true;

}
6.繰り返したすべての要素を秩序表から削除する
//   ,    ,           
//        ,       
bool delete_Same(sqList &L){
    if(L.length==0){
        return false;
    }
    for(i=0,j=1;j
7.二つの順序表を新たな順序表に統合する.
bool Merge(sqList &A,sqList &B,sqList &C){
    if(A.length+B.length>C.MaxSize){
        return false;
    }
    //ABC              
    int i=0,j=0,k=0;
    while(i
8.配列A[m+n](a 1,am,b 1...bn)を(b 1...bn,a 1...am)に変換する
//      ,     ,   b    ,  a      
//           
typedef int DataType;
void Reverse(DataType A[] ,int left,int right,int arraySize){
    if(left>=right||right>=arraySize)
        return ;
    int mid = (left+right)/2;
    for(int i=0;i
9.半角検索
//            
void search(ElemType A[],ElemType x){
    int low =0,high=n-1,mid;
    while(low