链表的声明及操作

View Code

以上使用数组做的

以下使用链表

#include<stdio.h>

#include<stdlib.h>

typedef struct Node *PtrToNode

typedef PtrToNode List

typedef PtrToNode Position



struct Node{

    ElementType Element;

    Position Next;

};



/*测试链表是否为空*/

int

IsEmpty(List L)

{

    return L->Next == Null;

}

/*测试是否是链表结尾的函数*/

int

IsLast(Position p,List L)

{

    return p->Next == Null;

}

/*Find例程*/

/*find position of X,Null if not found*/

Position

Find(ElementTYpe X,List L)

{

    Position p;

    p=L->Next;

    while(p != NULL && p->Element != X)

        p=p->Next;

    return p;

}

/*FindPrevious assume header node*/

Position

FindPrevious(List L,X)

{

    Position p;

    p=L;

    while(p->Next != NULL && p->Next->Element != X)//总是先判断p指向的当前结点的Next为不为NULL,如果不为NUll

        p=p->Next;                                  //当前次就去找他的下一个结点的Element值是否等于X

    return p;//返回的p如果指向最后一个标元,那就是没找到

}

/*链表的删除例程*/

/*delete first occurence of X*/

/*assume header node use*/

void

Delete(List L,ElementType Element)

{

    Position p,TmpCell;

    p=FindPrevious(L,X);

    if(!IsLast(p,L))

    {

        /*如果不用TmpCell需要删除的这个内存块,地址丢失

        p->Next=p->Next->Next;

        free()

        */

        TmpCell=p->Next;

        p->Next=TmpCell->Next;

        free(TmpCell);

    }

}

/*链表的插入例程*/

/*insert X after p*/

void

Insert(List L,ElementType X,Position p)

{

    Position TmpCell;

    TmpCell=(struct Node *)malloc(sizeof(struct Node));

    TmpCell->Element=X;

    TmpCell->Next=p->Next;//先让TepCell指向后面,在让p->Next指向TmpCell,不然会丢失后面的地址

    p->Next=TmpCell;

}
View Code

 无论Find还是FindPrevious都是返回的指向结点的指针

你可能感兴趣的:(链表)