【数据结构与算法】表

【数据结构与算法】第三章:表、栈和队列
标签(空格分隔): 【数据结构与算法】
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

【数据结构与算法】表

相关文章
相关标签/搜索