zoukankan      html  css  js  c++  java
  • 合并两个顺序表

    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 }
  • 相关阅读:
    如何评测一个软件工程师的计算机网络知识水平与网络编程技能水平?
    如何评测软件工程知识技能水平
    深入理解TCP协议及其源代码
    Socket与系统调用深度分析
    创新产品的需求分析:未来的图书会是什么样子?
    构建调试Linux内核网络代码的环境MenuOS系统
    Java实现简单网络聊天程序
    适配器模式的探究
    Linux下ss命令的研究
    业务领域建模Domain Modeling
  • 原文地址:https://www.cnblogs.com/panxinqi/p/6586732.html
Copyright © 2011-2022 走看看