//数组实现链表
typedef int PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;
typedef int ElementType;
#define SPACESIZE 11
struct Node{
ElementType element;
Position next;
};
struct Node CursorSpace[SPACESIZE]={{0,1},{0,2},{0,3},{0,4},{0,5},{0,6},{0,7},{0,8},{0,9},{0,10},{0,0}};
static Position CursorAlloc(void){
Position P;
P = CursorSpace[0].next;
CursorSpace[0].next = CursorSpace[P].next;
return P;
}
static Position CursorFree(Position P){
CursorSpace[P].next = CursorSpace[0].next;
CursorSpace[0].next = P;
}
bool isEmpty(List L){
return CursorSpace[L].next == 0;
}
//是否是最后一个元素
bool isLast(Position P,List L){
return CursorSpace[P].next == 0;
}
//查找链表中的元素
Position ListFind(ElementType X,List L){
Position P;
P =CursorSpace[L].next;
while( P && CursorSpace[P].element != X){
P = CursorSpace[P].next;
}
return P;
}
//查找X的前节点
Position FindPrevious(ElementType X,List L){
Position P;
P = L;
while( CursorSpace[P].next != 0 && CursorSpace[CursorSpace[P].next].element != X){
P = CursorSpace[P].next;
}
return P;
}
//删除链表中X的元素
void Delete(ElementType X,List L){
Position P,TmpCell;
P = FindPrevious(X,L);
if(!isLast(P,L)){
TmpCell = CursorSpace[P].next;
CursorSpace[P].next = CursorSpace[TmpCell].next;;
CursorFree(TmpCell);
}
}
//在链表的位置P插入X元素
void ListInsert(ElementType X,List L,Position P){
Position TmpCell;
TmpCell = CursorAlloc();
if(TmpCell == 0){
printf("Out of space\r\n");
}
CursorSpace[TmpCell].element = X;
CursorSpace[TmpCell].next = CursorSpace[P].next;
CursorSpace[P].next = TmpCell;
}
typedef int PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;
typedef int ElementType;
#define SPACESIZE 11
struct Node{
ElementType element;
Position next;
};
struct Node CursorSpace[SPACESIZE]={{0,1},{0,2},{0,3},{0,4},{0,5},{0,6},{0,7},{0,8},{0,9},{0,10},{0,0}};
static Position CursorAlloc(void){
Position P;
P = CursorSpace[0].next;
CursorSpace[0].next = CursorSpace[P].next;
return P;
}
static Position CursorFree(Position P){
CursorSpace[P].next = CursorSpace[0].next;
CursorSpace[0].next = P;
}
bool isEmpty(List L){
return CursorSpace[L].next == 0;
}
//是否是最后一个元素
bool isLast(Position P,List L){
return CursorSpace[P].next == 0;
}
//查找链表中的元素
Position ListFind(ElementType X,List L){
Position P;
P =CursorSpace[L].next;
while( P && CursorSpace[P].element != X){
P = CursorSpace[P].next;
}
return P;
}
//查找X的前节点
Position FindPrevious(ElementType X,List L){
Position P;
P = L;
while( CursorSpace[P].next != 0 && CursorSpace[CursorSpace[P].next].element != X){
P = CursorSpace[P].next;
}
return P;
}
//删除链表中X的元素
void Delete(ElementType X,List L){
Position P,TmpCell;
P = FindPrevious(X,L);
if(!isLast(P,L)){
TmpCell = CursorSpace[P].next;
CursorSpace[P].next = CursorSpace[TmpCell].next;;
CursorFree(TmpCell);
}
}
//在链表的位置P插入X元素
void ListInsert(ElementType X,List L,Position P){
Position TmpCell;
TmpCell = CursorAlloc();
if(TmpCell == 0){
printf("Out of space\r\n");
}
CursorSpace[TmpCell].element = X;
CursorSpace[TmpCell].next = CursorSpace[P].next;
CursorSpace[P].next = TmpCell;
}