【數據結構與算法】表

【數據結構與算法】第三章:表、棧和隊列
標籤(空格分隔): 【數據結構與算法】
3.2.2 鏈表算法

  • 鏈表由一系列沒必要再內存中相連的結構組成。每一個結構均含有表元素和指向包含該元素後繼元的結構的指針.這個指針即是Next指針.
  • ANSI C 規定NULL爲零.
  • 表頭\啞結點:一個標誌結點,約定表頭處於位置0處. 

【數據結構與算法】表

//ADT
List MakeEmpty( List L);
//是不是空表
int IsEmpty( List L);                           
//當前位置是不是末尾
int IsLast( Position P, List L);  
//返回X的位置
Position Find( ElementType X, List L);    
//返回X的前一個位置
Position FindPrevious( ElementType X, List L); 
//刪除某個位置元素
void Delete( ElementType X, List L);           
//插入
void Insert( ElementType X, List L, Position P);
void DeleteList( List L);
Position Header( List L);
Position First( List L);
Position Advance( Position P);
ElementType Retriece( Position P);
//具體實現
int IsEmpty( List L){   //Return true if L is empty
    return L->Next == NULL;
}
int IsLast( Position P, List L){
    return P->Next == NULL;
}
Position Find( ElementType X, List L){
    Position P;
    P = L->Next;
    while( P != NULL && P->Element != X)
        P = P->Next;
    return P;
}
Position FindPrevious( ElementType X, List L){
    //假設存在表頭
    Position P;
    P = L;
    while( P->Next != NULL && P->Next->Element != X)
        P = P->Next;
    return P;
}
void Delete( ElementType X, List L){
    Position P, TmpCell;
    P = FindPrevious( X, L);        //假設存在表頭
    if( !IsLast( P,L)){             //P不是最後一個位置時
        TmpCell = P->Next;          //考慮到P是指向X的錢一個位置
        P->Next = TmpCell->Next;    //若X存在,則P確定不是最後一個位置
        free( TmpCell);
    }
}
void Insert( ElementType X, List L, Position P){
    Position TmpCell;
    TmpCell = ( Position)malloc( sizeof( struct Node));
    if( TmpCell == NULL)
        FatalError("Out of space!");
    TmpCell->Element = X;
    TmpCell->Next = P->Next;
    P->Next = TmpCell;
}

3.2.3 雙鏈表
在數據結構上附加一個域,使它包含只想錢一個單元的指針. 代價:因爲須要更多的指紋定位,所以增長了空間的需求,同時使得刪除和插入的開銷增長了一倍.數據結構

【數據結構與算法】表
3.2.4 循環鏈表
最後的單元反過來直接指向第一個單元. 它能夠有表頭、也能夠沒有.當表頭存在的時候,便讓最後一個單元指向它. 還能夠是一種雙向鏈表ide

【數據結構與算法】表

相關文章
相關標籤/搜索