链表的声明及操作

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都是返回的指向结点的指针

posted @ 2015-06-25 16:28  Gabyler  阅读(1231)  评论(0编辑  收藏  举报