西安石油大学租房:编程感悟

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 03:44:39
typedef int ElemType;
#include "c2-1.h"
Status InitList(SqList &L)

   ElemType *p;
   p=(ElemType *)malloc(INITLISTSIZE * sizeof(ElemType));
   if(!p)
    exit(OVERFLOW);
   L.elem=p;
   L.length =0;
   L.listsize=INITLISTSIZE;
   return OK;
}
int LocateElem(SqList L,ElemType e,Status (*compare)(ElemType a,ElemType b))
{
   int i=1;
   ElemType *p;
   p=L.elem;
   while(i<=L.length&&!compare(*p++,e))
   {
    ++i;
   }
   if(i<=L.length)
    return i;
   else
    return 0;
}
Status  ListInsert(SqList &L,int i,ElemType e)

   ElemType *newbase,*p;
   if(i<1||i>L.length+1)
   return ERROR;
 
   if(L.length >=L.listsize )
{
    newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREAMENT)*sizeof(ElemType));
   if(!newbase)
    exit(OVERFLOW);
   L.elem =newbase;
   L.listsize=L.listsize+LISTINCREAMENT;
}
   for(p=L.elem+L.length-1;p>=(L.elem+i-1);--p)
    {
     *(p+1)=*p;
    }
  *(L.elem+i-1)=e;
  L.length++;
 
  return OK;
}Status GetElem(SqList L,int i,ElemType &e)
{
 if(i<1||i>L.length)
   exit(ERROR);
   e=*(L.elem+i-1);
   return OK;
}
Status ListDelete(SqList &L,int i,ElemType &e)

 ElemType *p,*q;
 p=L.elem+i-1;
   if(i<1||i>L.length)
 return ERROR;
    e=*p;
 for(q=p;q<=L.elem+L.length-1;q++)
 {
   *q=*(q+1);
 }
 L.length--;
 return OK;
}
void MergeList(SqList La,SqList Lb,SqList &Lc)
{
  InitList(Lc);
  int i=1,j=1,k=0,La_len,Lb_len;
  La_len=La.length;Lb_len=Lb.length;
  ElemType e1,e2,e;
  while((i<=La_len)&&(j<=Lb_len))
  { 
     GetElem(La,i,e1);GetElem(Lb,j,e2);
  if(k>0)
  {
    GetElem(Lc,k,e);
     }
 
  if(e1<=e2)
  {  
   if(e1!=e)
   {
   ListInsert(Lc,++k,e1);
   ++i;
   }
 
      else
      ++i;
  }
  else
  {
      if(e2!=e)
   {
   ListInsert(Lc,++k,e2);
   ++j;
   }
   else
  ++j;
  }
  }
  while(i<=La_len)
  {
     GetElem(La,i,e1);
  if(k>0)
  {GetElem(Lc,k,e);}
  if(e1!=k)
  {
  ListInsert(Lc,++k,e1);
  ++i;
  }
     else
  ++i;
  }  while(j<=Lb_len)
  {
     GetElem(Lb,j,e2);
     if(k>0)
  {GetElem(Lc,k,e);}
  if(e2!=e)
  {
  ListInsert(Lc,++k,e2);
  ++j;
  }
  else
        ++j;
  }
}void main()
{
   SqList L1,L2,L3;
   int j,k;
   InitList(L1);InitList(L2);
   for(j=1;j<=8;j++)
   {
     ListInsert(L1,j,j);
   }
   for(j=1;j<=8;j++)
   {
     ListInsert(L2,j,2*j);
   }
   for(j=1;j<=8;j++)
   {
    printf("%d ",*(L2.elem+j-1));
   }
   printf("\n");
   MergeList(L1,L2,L3);
   k=L3.length;
   for(j=1;j<=k;j++)
   {
    if(j<=k-1)
       printf("%d,",*(L3.elem+j-1));
    else
       printf("%d",*(L3.elem+j-1));
   }
   printf("\n");
}//输出的有序序列为无重复的