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

顺序表的合龙

2013-02-03 
顺序表的合并#include stdio.h#include malloc.htypedef struct {int *elemint length}SqListint I

顺序表的合并
#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)) //为什么不是《=  
  {   
  if(*pa <=*pb)   
  *pc++ = *pa++;   
  else  
  *pc++ = *pb++;   
  }   
  while(pa<pa_last)   
  *pc+……


依次将pa和pb中的元素存入pc指向的链表中(a1,b1,a2,b2·······)

热点排行