LinkList 의 구체 적 인 실현

3890 단어 데이터 구조
LinkList
#include
#include
using namespace std;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;
typedef struct LNode
{
 ElemType data;
 struct LNode* next;
}LNode ,*LinkList;

/*typedef struct{
  Link head,tail;
  int len;
}LinkList;*/
//         L
Status InitList_L(LinkList& L)
{
 L = (LNode*)malloc(sizeof(LNode));
 if (!L)
  exit(OVERFLOW);
 L->next = NULL;
 return OK;
}

//     L
Status DestroyList_L(LinkList& L)
{
 LinkList q;
 while (L)
 {
  q = L->next;
  free(L);
  L = q;
 }
 return OK;
}

//    L    
Status ClearList_L(LinkList& L)
{
 LinkList p=L->next, q;
 while (p)
 {
  q = p->next;
  free(p);
  p = q;
 }
 L->next = NULL;
 return OK;
}

//     L     
Status ListEmpty_L(LinkList L)
{
 if (NULL == L->next)
  return TRUE;
 else
  return FALSE;
}

//     L        
int ListLength_L(LinkList L)
{
 LinkList p = L->next;
 int i;
 for ( i = 0; p; p = p->next)
  ++i;
 return i;
}
//   e     L  i       
Status GetElem_L(LinkList L, int i, ElemType& e){
  LinkList p=L->next;
  int j=0;
  while(p||jnext;++j;
    }

   if(!p||j>i)   return ERROR;
   e=p->data;

    return OK;
}
//           ,      :a=b
Status compare(ElemType a, ElemType b){
   if(a==b) return TRUE;
   else return FALSE;
}
//     L       e  compare()          ;    ,  0
Status LocateElem_L(LinkList L, ElemType e, Status(*compare)(ElemType, ElemType))
{    int i=1;
     LinkList p=L->next;
     while(p&&!(*compare)(e,p->data))
       {
            p=p->next; i++;
        }

    if(!p) return 0;
    return i;
}
// cur_e     L      ,      ,  pre_e      ,      ,pre_e   
Status PriorElem_L(LinkList L,ElemType cur_e,ElemType& pre_e){
      LinkList p=L->next,q;
      while(p&&p->next)
        {
            q=p->next;
            if(cur_e==q->data) { pre_e=p->data; return OK;}
               p=q;
        }
        return INFEASIBLE;

 }
// cur_e    L              ,  next_e      ,      ,next   
Status NextElem_L(LinkList L,ElemType cur_e,ElemType& next_e){
      LinkList p=L->next,q;
      if(p)
    {
      while(p->next)
        {
           q=p->next;
           if(cur_e==p->data)  { next_e=q->data;return OK;}
           p=q;
        }
    }
       return INFEASIBLE;
}
//      i             e, L     
Status ListInsert_L(LinkList& L,int i,ElemType e){
      LinkList p=L;  int j=0;
      while(p&&jnext;j++;}
   if(!p||j>i-1)  return ERROR;
   LinkList s=(LinkList)malloc(sizeof(LNode));
  s->data=e; s->next=p->next;p->next=s;
   return OK;
}
//     L   i   。    e    , L     
Status ListDelete_L(LinkList& L,int i,ElemType e){
    LinkList p=L,q;int j=0;
    while(p&&jnext;j++;}
    if(!p||jnext; p->next=q->next;e=q->data; free(q);

   return OK;
}
//           
Status visit(ElemType i){
   if(cout<next;
 while (p)
 {
  if (!visit(p->data))
   return INFEASIBLE;
  p = p->next;
 }
 return OK;
}




int main(void)
{
 LinkList L;
 InitList_L(L);
 for (int i = 1, j = 1; i < 20;++j, i += 2)
  ListInsert_L(L, j, i);
 cout << "   L    :" << endl;
 cout << "*******************************************" << endl;
 cout << "   :" << ListLength_L(L)<

좋은 웹페이지 즐겨찾기