• 顺序表的非递减数列合并


    #include<stdio.h>     /*包括输入输出头文件*/
    #define ListSize 100
    typedef int DataType;
    typedef struct
    {
        DataType list[ListSize];
        int length;
    }SeqList;
    void InitList(SeqList *L)      /*将线性表初始化为空的线性表仅仅须要把线性表的长度length置为0*/
    {
        L->length=0; /*把线性表的长度置为0*/
    }
    int ListEmpty(SeqList L)     /*推断线性表是否为空,线性表为空返回1,否则返回0*/
    {
        if(L.length==0)
            return 1;
        else
            return 0;
    }
    
    int GetElem(SeqList L,int i,DataType *e)     /*查找线性表中第i个元素。

    查找成功将该值返回给e,并返回1表示成功;否则返回-1表示失败。

    */ { if(i<1||i>L.length) /*在查找第i个元素之前,推断该序号是否合法*/ return -1; *e=L.list[i-1]; /*将第i个元素的值赋值给e*/ return 1; } int LocateElem(SeqList L,DataType e) /*查找线性表中元素值为e的元素。查找成功将相应元素的序号返回。否则返回0表示失败。

    */ { int i; for(i=0;i<L.length;i++) /*从第一个元素開始比較*/ if(L.list[i]==e) return i+1; return 0; } int InsertList(SeqList * L,int i,DataType e) /*在顺序表的第i个位置插入元素e,插入成功返回1,假设插入位置不合法返回-1,顺序表满返回0*/ { int j; if(i<1||i>L->length+1) /*在插入元素前,推断插入位置是否合法*/ { printf("插入位置i不合法! "); return -1; } else if(L->length>=ListSize) { printf("顺序表已满,不能插入元素。 "); return 0; } else { for(j=L->length;j>=i;j--) /*将第i个位置以后的元素依次后移*/ L->list[j]=L->list[j-1]; L->list[i-1]=e; L->length=L->length+1; return 1; } } int DeleteList(SeqList *L,int i,DataType *e) { int j; if(L->length<=0) { printf("顺序表已空不能进行删除! "); return 0; } else if(i<1||i>L->length) { printf("删除位置不合适! "); return -1; } else { *e=L->list[i-1]; for(j=i;j<=L->length-1;j++) L->list[j-1]=L->list[j]; L->length=L->length-1; return 1; } } int ListLength(SeqList L) { return L.length; } void ClearList(SeqList *L) { L->length=0; } void MergeList(SeqList A,SeqList B,SeqList *C); /*合并顺序表A和B中元素的函数声明*/ void main() { int i,flag; DataType a[]={6,11,11,23}; DataType b[]={2,10,12,12,21}; DataType e; SeqList A,B,C; /*声明顺序表A,B和C*/ InitList(&A); /*初始化顺序表A*/ InitList(&B); /*初始化顺序表B*/ InitList(&C); /*初始化顺序表C*/ for(i=1;i<=sizeof(a)/sizeof(a[0]);i++) /*将数组a中的元素插入到顺序表A中*/ { if(InsertList(&A,i,a[i-1])==0) { printf("位置不合法"); return; } } for(i=1;i<=sizeof(b)/sizeof(b[0]);i++) /*将数组b中元素插入到顺序表B中*/ { if(InsertList(&B,i,b[i-1])==0) { printf("位置不合法"); return; } } printf("顺序表A中的元素: "); for(i=1;i<=A.length;i++) /*输出顺序表A中的每一个元素*/ { flag=GetElem(A,i,&e); /*返回顺序表A中的每一个元素到e中*/ if(flag==1) printf("%4d",e); } printf(" "); printf("顺序表B中的元素: "); for(i=1;i<=B.length;i++) /*输出顺序表B中的每一个元素*/ { flag=GetElem(B,i,&e); /*返回顺序表B中的每一个元素到e中*/ if(flag==1) printf("%4d",e); } printf(" "); printf("将在A中出现B的元素合并后C中的元素: "); MergeList(A,B,&C); /*将在顺序表A和B中的元素合并*/ for(i=1;i<=C.length;i++) /*显示输出合并后C中全部元素*/ { flag=GetElem(C,i,&e); if(flag==1) printf("%4d",e); } printf(" "); getch(); } void MergeList(SeqList A,SeqList B,SeqList *C) /*合并顺序表A和B的元素到C中。并保持元素非递减排序*/ { int i,j,k; DataType e1,e2; i=1;j=1;k=1; while(i<=A.length&&j<=B.length) { GetElem(A,i,&e1); /*取出顺序表A中的元素*/ GetElem(B,j,&e2); /*取出顺序表B中的元素*/ if(e1<=e2) /*比較顺序表A和顺序表B中的元素*/ { InsertList(C,k,e1); /*将较小的一个插入到C中*/ i++; /*往后移动一个位置,准备比較下一个元素*/ k++; } else { InsertList(C,k,e2); /*将较小的一个插入到C中*/ j++; /*往后移动一个位置,准备比較下一个元素*/ k++; } } while(i<=A.length) /*假设A中元素还有剩余,这时B中已经没有元素*/ { GetElem(A,i,&e1); InsertList(C,k,e1); /*将A中剩余元素插入到C中*/ i++; k++; } while(j<=B.length) /*假设B中元素还有剩余,这时A中已经没有元素*/ { GetElem(B,j,&e2); InsertList(C,k,e2); /*将B中剩余元素插入到C中*/ j++; k++; } C->length=A.length+B.length; /*C的表长等于A和B的表长的和*/ }


  • 相关阅读:
    用户在第二层,而你在第五层,深度玩转华为预测服务
    Docker启动PostgreSQL时创建多个数据库
    CORS跨源资源共享概念及配置(Kubernetes Ingress和Spring Cloud Gateway)
    HTTP Cookies知识-查看、发送、获取、返回
    Kubernetes ConfigMap详解,多种方式创建、多种方式使用
    示例讲解PostgreSQL表分区的三种方式
    Springboot WebFlux集成Spring Security实现JWT认证
    Bean初始化操作initMethod、@PostConstruct和InitializingBean
    Springboot集成Spring Security实现JWT认证
    Spring Data JPA的Audit功能,审计数据库的变更
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/6921236.html
Copyright © 2020-2023  润新知