首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

顺序表的归并

2012-10-06 
顺序表的合并#include stdio.h#include malloc.htypedef struct{int *elemint length}SqListint In

顺序表的合并
#include <stdio.h>  
#include <malloc.h>  
typedef struct 
{  
  int *elem;  
  int length;  
}SqList;  
  
int InitList_sq(SqList &A, int n)  
{  
  A.elem=(int *)malloc(n*sizeof(int));  
  if(!A.elem)  
  return 0;  
  A.length=n;  
  return 1;  
}  
  
int Load_Sq(SqList &L)  
{  
  int i;  
  if(L.length == 0)  
  return 0; 
  else 
  {  
  for(i=0;i <L.length;i++)  
  printf("%d ",L.elem[i]);  
  }  
  printf("\n");  
  return 1;  
}  
SqList MergeList_Sq(SqList &A,SqList &B, SqList &C)  
{  
  int *pa=A.elem;  
  int *pb=B.elem;  
  C.length=A.length + B.length;  
  int *pc=C.elem=(int * )malloc(C.length * sizeof(int));  
  int *pa_last=A.elem + A.length;
int *pb_last=B.elem + B.length; //这两句话怎么理解阿 
  
  while((pa<pa_last)&&(pb <pb_last))  
  {  
  if(*pa <=*pb)  
  *pc++ = *pa++;  
  else 
  *pc++ = *pb++;  
  }  
  while(pa<pa_last)  
  *pc++=*pa++;  
  while(pb <pb_last)  
  *pc++=*pb++;  
  return C;  
}  
  
int main()  
{  
  SqList A, B, C; 
  int na,nb;  
  scanf("%d",&na); 
  InitList_sq(A,na); 
   
  for(int i=0;i<na;i++)  
  {  
  scanf("%d",&A.elem[i]);  
  }  
  scanf("%d",&nb);  
  InitList_sq(B,nb); 
  
  for(int j=0;j<nb;j++)  
  {  
  scanf("%d",&B.elem[j]);  
  }  
  MergeList_Sq(A,B,C);  
  Load_Sq(C); 
  return 0;  




[解决办法]
在知道了链表长度的前提下是可以使用这种方法跳转到列表末尾的
[解决办法]

探讨

while((pa<pa_last)&amp;&amp;(pb <pb_last)) [color=#FF0000][/color]//为什么不是《=
{
if(*pa <=*pb)
*pc++ = *pa++;
else
*pc++ = *pb++;
}
while(pa<pa_last)
*pc+……

热点排行