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