静态链表

#include <iostream>

using namespace std ;

#define MAXSIZE 1000
#define OK true 
#define  ERROR false

typedef int ElemType ;
typedef bool Status ;

typedef struct 
{
 ElemType data ;
 int cur ;
}Component,StaticLinkList[MAXSIZE];

Status InitStaticLinkList(StaticLinkList space)
{
 for(int i = 0 ; i < MAXSIZE-1;i++)
  space[i].cur = i+1 ;
 space[MAXSIZE-1].cur = 0 ;
 return OK ;
}

int Malloc_SLL(StaticLinkList space )
{
 int i = space[0].cur ;
 if(space[0].cur)
  space[0].cur = space[i].cur;
 return i ;
}

int ListLength(StaticLinkList space )
{
 int len = 0 ;
 int i = space[MAXSIZE-1].cur;
 while(i)
 {
  len++ ;
  i = space[i].cur ;
 }
   return len ;
}
Status ListInsert(StaticLinkList space , int i , ElemType e )
{
 if( i < 1 || i > ListLength(space)+1)
  return ERROR ;
    int j = Malloc_SLL(space);
 if(j)
 {
       space[j].data = e ;
    int k = MAXSIZE-1 ;//k是最后一个元素的下标
    for(int l = 1 ; l <= i -1 ;l ++ )
     k = space[k].cur;
    space[j].cur = space[k].cur;
    space[k].cur = j ;
    return OK ;
 }
 return ERROR ;
}
void Free_SLL(StaticLinkList space , int k  )
{
 space[k].cur = space[0].cur ;
 space[0].cur = k ;
}
Status ListDelete(StaticLinkList space , int i )
{
 if( i < 1 || i > ListLength(space))
  return ERROR ;
 int k = MAXSIZE -1 ;
 int j = 0 ;
 for( ; j <= i-1 ; j ++)
  k = space[k].cur ;
 j = space[k].cur ;
 space[k].cur = space[j].cur ;
 Free_SLL(space , j);
 return OK;
}

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