西安石油科技:编程感悟01
来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 08:36:49
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);
printf("%d and %d\n ",e1,e2);
if(e1<=e2)
{
ListInsert(Lc,++k,e1);
++i;
}
else
{
ListInsert(Lc,++k,e2);
++j;
}
}
while(i<=La_len)
{
GetElem(La,i,e1);
printf("%d\n",e1);
ListInsert(Lc,++k,e1);
++i;
} while(j<=Lb_len)
{
GetElem(Lb,j,e2);
printf("%d\n",e2);
ListInsert(Lc,++k,e2);
++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");
}//输出的有序序列为重复的
#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);
printf("%d and %d\n ",e1,e2);
if(e1<=e2)
{
ListInsert(Lc,++k,e1);
++i;
}
else
{
ListInsert(Lc,++k,e2);
++j;
}
}
while(i<=La_len)
{
GetElem(La,i,e1);
printf("%d\n",e1);
ListInsert(Lc,++k,e1);
++i;
} while(j<=Lb_len)
{
GetElem(Lb,j,e2);
printf("%d\n",e2);
ListInsert(Lc,++k,e2);
++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");
}//输出的有序序列为重复的