数据结构与算法表
Posted Coder的自我修养
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法表相关的知识,希望对你有一定的参考价值。
【数据结构与算法】第三章:表、栈和队列
标签(空格分隔): 【数据结构与算法】
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 循环链表
最后的单元反过来直接指向第一个单元. 它可以有表头、也可以没有.当表头存在的时候,便让最后一个单元指向它. 还可以是一种双向链表.
以上是关于数据结构与算法表的主要内容,如果未能解决你的问题,请参考以下文章