链表的声明及操作
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; }
无论Find还是FindPrevious都是返回的指向结点的指针