链表的实现

链表的类型声明

#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库函数,它使系统创建一个新的内存空间并返回指向该内存的指针。
posted @ 2017-01-25 12:06  梁月唯  阅读(453)  评论(0编辑  收藏  举报