データ構造クラスのメモ

テンプレート< クラス T>
 void SeqList <T> :: reSize(int newsize)
{ 
    if(newSize!= maxSize)
    { 
        T * newarray = new T [newSize];
        / * 
        サイズnewSizeのメモリ空間を開く
        データ型はT         
        * / 
       if(newarray == NULL)
       { 
        cerr << " ストレージの割り当てに失敗しました!" << endl; 
        exit(1 ); 
       } 
    } 
    int n = last + 1 ; 
    T * scrptr =データ; 
    T * destptr = newarray;
    while(n--)* destptr ++ = * srcptr ++ ; 
    []データを削除; 
    data = newarray; 
    maxSize = newSize; 
} 


テンプレート < クラス T>
 int SeqList <T> :: search(T&x)const 
{ 
    forint i = 0 ; i <= last; i ++ 
    { 
        if(data [i] == x)return i + 1 ; 
    } 
} 

/ * 
在第i位置挿入入x 
挿入入前:a1、....、ai-1、ai、...、an 
挿入入后:a1、...、ai-1、x、ai、...、an 
ai ai-1とaiの間のロジックが変更されました
テーブルがいっぱいです:last> = MaxSize-1 
last is last the element element array添字
1 <= l <=最後+ 2 
が移動すると、より少ない、より高い挿入素子の効率
可動要素とテーブルの長さの数の挿入および位置に関連しているだけでなく、
最良の場合(I = N + 1)基礎文がゼロに実行されます、時間の複雑さO(1)
* / 

/ * 
前方移動の
シーケンステーブルの実現は
最初の位置を上書きして削除位置が正当かどうかを判断することと同等
1 <= i <= last + 1 
* / 
テンプレート < class T>
 bool SeqList <T> :: Remove(int i、T&x)
{ 
    if(last ==- 1 || i < 1 || i> last + 1return  false ; 
    x = data [i- 1 ];// i番目の要素配列のインデックスはi-1
    forint j = i; j <= last; j ++ 
    { 
        data [j - 1 ] = data [j]; // バックカバーフロント
    } 
    last- ; // テーブル長-1 
} 


// シーケンステーブルの入力アルゴリズム 
テンプレート< クラス T>
 void SeqList <T> :: input()
{ 
    cout << " 入力要素の" ;
     while1 
    { 
        cin >> last;
         if(last <= maxSize- 1break ;
        cout << " 数値が正しくありません" ; 
    } 
    forint i = 0 ; i <= last; i ++ 
    { 
        cin > data [i]; 
        cout << i + 1 << endl; 
    } 
} 
 
// シーケンステーブル出力アルゴリズム 
テンプレート< クラス T>
 void SeqList <T> :: output()
{ 
    cout << " 現在の要素の最後の位置は" << last << endl;
     forint i = 0; i <= last; i ++ 
    { 
        cout << " " << i + 1 << " " << data [i] << endl; 
    } 
} 

// 顺序表的应用

// 并运算
空隙連合(SeqList < INT >&A、SeqList < INT >&B)
{ 
    int型 N = A.length()、X。
    int m = B.length();
    forint i = 1 ; i <= m; i ++ 
    { 
        B.getData(i、x);
        int k = A.Search(x); // Aで検索
        if(k == 0// Aに最後に挿入されたものが見つからない場合は、マージの結果をAに入れます(スペースを再度開くと無駄になります) 
        {A.Insert(n、x); n ++ ;} 
    } 
} 

// 交差演算
void Intersection(SeqList < int >&A、SeqList < int >&B)
{ 
    int n = A.Length();
     int m = B.長さ(); int i = 1 、x;
     while(i <= n)
    { 
        A.getData(i、x); 
        int k = B.search(x);
         if(k == 0)A.Remove(i、x)、n-- ;
         else i ++ ; 
    } 
} 

// シーケンステーブルの利点:
/ * 
テーブル内の要素間の論理関係を表現するために追加のストレージスペースを追加する必要はありません。
ランダムアクセスは高速です。
テーブル内の任意の位置にある要素にアクセスするには。シーケンステーブルの欠点:
(1)挿入および削除操作では多数の要素を移動する必要があります。
(2)テーブルの容量を決定するのは難しく、テーブルの容量を拡張するのは困難です。
(3)ストレージスペースの断片化

されたリンクリスト非常に大きいです。頻繁な挿入または削除に適しており、格納領域の要件は大きく異なります
* /  


/ * 
単一リンクリストは、線形リンクリストとも呼ばれる最も単純なリンクリストです。これは、ポインターを使用してノード間の論理関係を表します。
ノードは、データフィールドとポインターフィールドの
線形構造を持っています。ヘッドへの最初のポインタ
のノードは連続連続99.99%不連続な記憶保存することができない
論理的な順序をノードの順序は、異なる物理的とすることができる
テーブルを容易に展開
* /  

/ * 
シーケンステーブルが固定容量である
単鎖未定着   
* /  

/ * 
クラスの数コンセプト(単鎖)の発現
リストノード(ListNode)クラスの
リスト(一覧)クラス
* /  

// 1.複合クラス1 
クラスリスト; // リンクリストクラス定義(複合モード)
クラスLinkNode 
{ 
    friend クラスリスト; // リンクリストクラスはそのフレンドクラス
    private int data; 
        LinkNode * link; 
}; 
クラスリスト
{ 
    private 
        LinNode * first; 
}; 
// Friendクラスには対称性がない?// 複合クラス2:linkNodeクラス
struct LinkNode 
    を構造体
{ int data:
    LinkNode * link; 
};で定義します。
class List 
{ 
    private 
        LinkNode * first;
     public 
}; 
/ * 
構造によってListのカプセル化が失わ
れますが、LIstオブジェクトに属するすべてのLinkNodeノードには、firstでのみアクセスできます。
* /  
// 2.ネストされたクラス
クラスリスト
{ 
    
}   
 
 // 3.継承   
クラスLinkNode 
{ 
     protected int data; 
         LinkNode * link; 
}; 
クラスリスト
{ 
    
} 
// 書き終えていない場合は、PPTに移動してください。
1

 

おすすめ

転載: www.cnblogs.com/zzyh/p/12761342.html
おすすめ