静态链表实现

//静态链表实现
//====================================================
#include<stdio.h>

#define MaxSize 100
#define null 0
typedef int ElementType;
typedef int Position;
struct Node {
union{
ElementType data;
int size;
}UData;
Position pNext;
};
struct Node Space[MaxSize];
typedef int List;
//=====================================================
void init(void);//初始化 
Position Malloc(void);//分配一份空间 
void Free(Position p);//收回一份空间 

Position CreateList(void);
void Disope(List L);
void Show(List L);

Position CreateNode(ElementType X);
void Insert(List L,ElementType X);
void DeleteAll(List L,ElementType X);
Position Find(List L,ElementType X);
//=====================================================
void init(void)//初始化 
{
Position i=0;
while(i<MaxSize-1)
{
Space[i].pNext=i+1;
i++;
}
Space[i].pNext=null;
}
Position Malloc(int size)//分配一份空间
{
Position t=Space[0].pNext;
Space[0].pNext=Space[t].pNext;
return t; 
} 
void Free(Position p)//收回一份空间 
{
Space[p].pNext=Space[0].pNext;
Space[0].pNext=p;
}

Position CreateList(void)
{
List L;
L=Malloc(sizeof(ElementType));

if(L==null) return null;
Space[L].pNext=null;
Space[L].UData.size=0;
return L;
}
void Disope(List L)
{
Position ptemp=Space[L].pNext,t;
while(ptemp!=null)
{
t=Space[ptemp].pNext;
Free(ptemp);
ptemp=t;
}
}
void Show(List L)
{
Position ptemp=Space[L].pNext;
while(ptemp!=null)
{

printf("%d\t%d\t%d\t\n",Space[ptemp].UData.data,ptemp,Space[ptemp].pNext);
ptemp=Space[ptemp].pNext;
}
printf("\n");
}

Position CreateNode(ElementType X)
{
Position pNew;
pNew=Malloc(sizeof(ElementType));
Space[pNew].pNext=null;
Space[pNew].UData.data=X;
return pNew;
}
void Insert(List L,ElementType X)
{
Position pNew=CreateNode(X);
Position p1=L,p2=Space[L].pNext;
while(p2!=null&&Space[p2].UData.data<X)
{
p1=p2;
p2=Space[p2].pNext;
}
Space[pNew].pNext=Space[p1].pNext;
Space[p1].pNext=pNew;
Space[L].UData.size++;
}
void DeleteAll(List L,ElementType X)
{
if( L==null && Space[L].pNext==null ) return ;
Position p1=L,p2=Space[L].pNext;
while(p2!=null)
{
if(Space[p2].UData.data==X)
{
Space[L].UData.size--;
Space[p1].pNext=Space[p2].pNext;
Free(p2);
p2=Space[p1].pNext;
}
else
{
p1=p2;
p2=Space[p2].pNext;
}
}
}
Position Find(List L,ElementType X)
{
Position ptemp=Space[L].pNext;
while(ptemp!=null)
{
if(Space[ptemp].UData.data==X)
{
return ptemp;
}
ptemp=Space[ptemp].pNext;
}
} 

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