链表的类型声明
#ifndef _LIST_H
struct Node;
typedef struct Node *PtrToNode;
typedef PtrToNode List;
tppedef PtrToNode Position;
List MakeEmpty( List L);
int IsEmpty( List L );
int IsLast( Position P,List L);
Position Find( ElementType X, List L);
void Delete( ElementType X, List L);
Position FindPrevious( 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);
#endif
struct Node
{
ElementType Element;
Position Next;
}
测试一个链表是否为空
#如果为空返回TRUE.
int IsEmpty ( List L)
{
return L->Next == NULL;
}
测试当前位置是否是链表的末尾
#如果是链表的末尾,返回TRUE.
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;
}
链表的删除
void Delete (ElementType X, List L)
{
Position P,TmpCell;
P = FindPrevious(X,L);
if(!IsLast(P,L))
{
TmpCell = P->Next;
P->Next = TmpCell->Next;
free(TmpCell);
}
}
FindPrevious
Position FindPrevious(ElementType X,List L)
{
Position P;
P=L;
while(P->Next != NULL && P->Next->Element !=X)
P = P->Next;
return P;
}
链表的插入
void Insert(ElementType X,List L,Position P)
{
Position TmpCell;
TmpCell = malloc(sizeof(Struct Node));
if(TmpCell == NULL)
FatalError("Out of space!!");
TmpCell->Element = X;
TmpCell->Next = P->Next;
P->Next = TmpCell;
}
常见错误
1.最常见的错误来自系统的错误信息而崩溃,比如“memory access violation"或”segmentation vialation"这种错误意味着有指针变量包含了伪地址,可能原因是初始化变量失败。
2.第二种错误是何时使用或何时不使用malloc获取一个新的单元。
备忘:声明指向一个结构的指针并不创建该结构,而只是给出足够的空间容纳结构可能会使用的地址,创建尚未声明过的记录的方法是使用malloc库函数,它使系统创建一个新的内存空间并返回指向该内存的指针。