合并两个顺序表

2.分别创建两个有序的顺序表(每个表的元素个数以及每个元素的值在运行时由键盘输入),
现将两个有序表合并,并保证新表依然为有序的顺序表。

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #define  MAXSIZE  100 
  4 typedef int DataType;
  5 
  6 typedef  struct  node 
  7 {   
  8     DataType  data[MAXSIZE];
  9      int  length;
 10 } SeqList,*PSeqList;
 11 
 12 PSeqList  Init_SeqList(void);
 13 PSeqList Input_Seqlist(PSeqList A,int *pn);
 14 PSeqList merge_SeqList (PSeqList A,  PSeqList  B,  PSeqList  C);
 15 Print_SeqList(PSeqList PL);
 16 
 17 
 18 
 19 main()
 20 {
 21     int n;
 22     PSeqList Pa,Pb,Pc;
 23     Pa=Init_SeqList();
 24     Pb=Init_SeqList();
 25     Pc=Init_SeqList();
 26     Pa=Input_Seqlist(Pa,&n);
 27     //Print_SeqList(Pa);
 28     Pb=Input_Seqlist(Pb,&n);
 29     //Print_SeqList(Pb);
 30     Pc=merge_SeqList (Pa,Pb,Pc);
 31     Print_SeqList(Pc);
 32 
 33 }
 34 
 35 PSeqList  Init_SeqList(void)
 36 {  /*创建一顺序表,入口参数无,返回一个指向顺序表的指针,指针值为零表示分配空间失败*/
 37    PSeqList  PL;
 38    PL=( PSeqList )malloc(sizeof(SeqList)); 
 39    if (PL)       /*若PL=0表示分配失败*/
 40         PL->length=0;     
 41    return (PL);
 42 } 
 43 
 44 PSeqList Input_Seqlist(PSeqList A,int *pn)
 45 {
 46     int i;
 47     printf("请输入整型数据个数:");
 48     scanf("%d",pn);
 49     printf("请输入%d个整型数据,中间用,号隔开",*pn);
 50     for(i=0;i<*pn;i++)
 51     {
 52         scanf("%d",&A->data[i]);
 53         A->length++;
 54     }
 55     return(A);
 56 
 57 }
 58 
 59 PSeqList merge_SeqList (PSeqList A,  PSeqList  B,  PSeqList  C)
 60 {    int  i,j,k;
 61       i=0;j=0;k=0;
 62       if (A->length+B->length>MAXSIZE) 
 63           {  
 64           printf("C表空间不足");      
 65           return(0);   
 66       }
 67      while ( i<A->length && j<B->length )
 68      {
 69            if (A->data[i]<B->data[j])     
 70                C->data[k++]=A->data[i++];
 71            else     
 72                C-> data[k++]=B->data[j++]; 
 73     }
 74      while (i<A->length )       
 75          C->data[k++]= A->data[i++];
 76      while (j<B->length )       
 77          C->data[k++]= B->data[j ++];
 78       C->length=k;
 79       return(C); 
 80 }   
 81 
 82 int Print_SeqList(PSeqList PL)
 83 {
 84     int i;
 85     if(!PL)
 86     {
 87         printf("无此顺序表");
 88         return -1;
 89     }
 90     if(PL->length==0)
 91     {
 92         printf("空表");
 93         return 0;
 94     }
 95 
 96     printf("顺序表的长度为%d",PL->length);
 97     printf("顺序表的各元素值为:");
 98     for(i=0;i<=PL->length-1;i++)
 99         printf("%4d",PL->data[i]);
100     return 1;
101 
102 }

 

转载于:https://www.cnblogs.com/panxinqi/p/6586732.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设两个顺序表la和lb已经按照从小到大的顺序排好了序,那么可以按照以下步骤合并: 1. 定义一个新的顺序表lc,作为合并后的结果。 2. 从la和lb的第一个元素开始比较,将较小的元素插入lc中,并把该元素所在的顺序表的指针向后移动一位。 3. 重复上述步骤,直到其中一个顺序表元素全部插入到lc中。 4. 将另一个顺序表剩余的元素依次插入到lc的尾部。 5. 合并完成后,lc即为合并后的新顺序表。 以下是一个示例代码: ```c #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 // 定义顺序表的最大长度 typedef struct { int data[MAXSIZE]; // 顺序表存储的数据 int length; // 顺序表的长度 } SqList; // 合并两个顺序表la和lb,结果存储在lc中 void mergeList(SqList la, SqList lb, SqList *lc) { int i = 0, j = 0, k = 0; while (i < la.length && j < lb.length) { if (la.data[i] <= lb.data[j]) { lc->data[k++] = la.data[i++]; } else { lc->data[k++] = lb.data[j++]; } } while (i < la.length) { lc->data[k++] = la.data[i++]; } while (j < lb.length) { lc->data[k++] = lb.data[j++]; } lc->length = k; } int main() { SqList la = {{1, 3, 5, 7, 9}, 5}; // 顺序表la SqList lb = {{2, 4, 6, 8, 10}, 5}; // 顺序表lb SqList lc; // 合并后的顺序表lc mergeList(la, lb, &lc); for (int i = 0; i < lc.length; i++) { printf("%d ", lc.data[i]); } printf("\n"); return 0; } ``` 上述代码中,mergeList函数实现了两个顺序表合并,最终结果存储在lc中。在main函数中,我们定义了两个顺序表la和lb,将它们合并后存储在lc中,并出lc中的所有元素

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值