您的位置:首页 > 其它

链表的声明及操作

2015-06-25 16:28 211 查看
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都是返回的指向结点的指针
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: