数据结构与算法表

Posted Coder的自我修养

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法表相关的知识,希望对你有一定的参考价值。

【数据结构与算法】第三章:表、栈和队列

标签(空格分隔): 【数据结构与算法】

3.2.2 链表

  • 链表由一系列不必再内存中相连的结构组成。每个结构均含有表元素和指向包含该元素后继元的结构的指针.这个指针便是Next指针.

  • ANSI C 规定NULL为零.

  • 表头\哑结点:一个标志结点,约定表头处于位置0处. 

 
   
   
 
  1. //ADT

  2. List MakeEmpty( List L);

  3. //是否是空表

  4. int IsEmpty( List L);                          

  5. //当前位置是否是末尾

  6. int IsLast( Position P, List L);  

  7. //返回X的位置

  8. Position Find( ElementType X, List L);    

  9. //返回X的前一个位置

  10. Position FindPrevious( ElementType X, List L);

  11. //删除某个位置元素

  12. void Delete( ElementType X, List L);          

  13. //插入

  14. void Insert( ElementType X, List L, Position P);

  15. void DeleteList( List L);

  16. Position Header( List L);

  17. Position First( List L);

  18. Position Advance( Position P);

  19. ElementType Retriece( Position P);

 
   
   
 
  1. //具体实现

  2. int IsEmpty( List L){   //Return true if L is empty

  3.    return L->Next == NULL;

  4. }

  5. int IsLast( Position P, List L){

  6.    return P->Next == NULL;

  7. }

  8. Position Find( ElementType X, List L){

  9.    Position P;

  10.    P = L->Next;

  11.    while( P != NULL && P->Element != X)

  12.        P = P->Next;

  13.    return P;

  14. }

  15. Position FindPrevious( ElementType X, List L){

  16.    //假设存在表头

  17.    Position P;

  18.    P = L;

  19.    while( P->Next != NULL && P->Next->Element != X)

  20.        P = P->Next;

  21.    return P;

  22. }

  23. void Delete( ElementType X, List L){

  24.    Position P, TmpCell;

  25.    P = FindPrevious( X, L);        //假设存在表头

  26.    if( !IsLast( P,L)){             //P不是最后一个位置时

  27.        TmpCell = P->Next;          //考虑到P是指向X的钱一个位置

  28.        P->Next = TmpCell->Next;    //若X存在,则P肯定不是最后一个位置

  29.        free( TmpCell);

  30.    }

  31. }

  32. void Insert( ElementType X, List L, Position P){

  33.    Position TmpCell;

  34.    TmpCell = ( Position)malloc( sizeof( struct Node));

  35.    if( TmpCell == NULL)

  36.        FatalError("Out of space!");

  37.    TmpCell->Element = X;

  38.    TmpCell->Next = P->Next;

  39.    P->Next = TmpCell;

  40. }

3.2.3 双链表

在数据结构上附加一个域,使它包含只想钱一个单元的指针. 代价:由于需要更多的指纹定位,因此增加了空间的需求,同时使得删除和插入的开销增加了一倍.

3.2.4 循环链表

最后的单元反过来直接指向第一个单元. 它可以有表头、也可以没有.当表头存在的时候,便让最后一个单元指向它. 还可以是一种双向链表.


以上是关于数据结构与算法表的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法详解什么是哈希表,并用代码手动实现一个哈希表

数据结构与算法6-链表下

数据结构与算法学习——单链表相关算法

数据结构与算法学习——单链表相关算法

将数据从底部工作表对话框片段传递到片段

跳跃表数据结构与算法分析