重学数据结构之算法2.7

来源:互联网 发布:淘宝琴国乐器 编辑:程序博客网 时间:2024/05/22 01:49
#include<stdio.h>  //输入输出函数头文件#include<stdlib.h>  //内存申请函数头文件#define LIST_INIT_SIZE  100#define LISTINCREMENT  10typedef int ElemType ;typedef struct{    ElemType* elem ;                   //存储空间基址    int length ;                       //当前长度    int listsize ;                     //当前分配的存储容量(以sizeof(ElemType)为单位)}Sqlist ;//操作结构,构造一个空的线性表Lvoid InitList( Sqlist& L ){    //首先申请一定的空间    L.elem = ( ElemType* ) malloc( LIST_INIT_SIZE * sizeof ( ElemType ) ) ;    //判断是否申请成功    if ( ! L.elem )    {        printf( "分配内存失败:\n " );        exit ( -1 ) ;    }            //将此时线性表的大小初始化为0    L.length = 0 ;    //将此线性表的剩余空间置为最大    L.listsize =  LIST_INIT_SIZE ;}//初始条件:线性表L已经存在//操作结果,销毁线性表L//初始条件:线性表L已经存在//操作结果:将L重置为空表void ClearList ( Sqlist& L){    free ( L.elem ) ;    InitList(L) ;}//初始条件:线性表L以存在//操作结果:若L为空表,则返回TRUE,否则返回FALSEint ListEmpty ( Sqlist L ){    if ( L.length == 0 )        return 0 ;    else        return 1 ;}void DestroyList ( Sqlist& L ){    free ( L.elem ) ;}//初始条件:La和Lb都存在//操作结果:将La和Lb中值,插入到Lc中void MergeList( Sqlist& La , Sqlist& Lb , Sqlist& Lc ){    int la = 1 , lb2 = 1 , i = 1 ;    //首先判断La和Lb是否为空    if( !ListEmpty( La ))    {        if( !ListEmpty( Lb ))        {            printf( "两个线性表都为空:" ) ;        }        else        {            int lb = 1 ;            for( ; lb <= Lb.length ; lb ++ )            {                Lc.elem[ lb ] = Lb.elem[ lb ] ;                Lc.length ++ ;            }        }    }    else    {                while( ( la < La.length  ) && ( lb2 < Lb.length ) )        {            if( La.elem[ la ] > Lb.elem[ lb2 ] )            {                Lc.elem[ i ] = Lb.elem[ lb2 ] ;                i ++ ;                lb2 ++ ;                Lc.length ++ ;            }            else            {                Lc.elem[ i ] = La.elem[ la ] ;                i ++ ;                la ++ ;                Lc.length ++ ;            }        }        while( la < La.length  )        {            Lc.elem[ i ] = La.elem[ la ] ;            i ++ ;            la ++ ;            Lc.length ++ ;        }        while( lb2 < Lb.length  )        {            Lc.elem[ i ] = Lb.elem[ lb2 ] ;            i ++ ;            lb2 ++ ;            Lc.length ++ ;        }    }}int main (){    Sqlist M , N ,P ;    InitList ( M ) ;    InitList ( N ) ;    InitList ( P ) ;    for( M.length = 1 ; M.length < 10 ; M.length ++ )    {        M.elem [ M.length ] = M.length ;    }    for( N.length = 1 ; N.length < 10 ; N.length ++ )    {        N.elem [ N.length ] = N.length * 2 ;    }    MergeList( M , N , P ) ;    int m = 1;    for (   ; m < M.length ; m ++ )    {        printf("%d\n", M.elem[ m ])  ;    }    int n = 1;    for (   ; n < N.length ; n ++ )    {        printf("%d\n", N.elem[ n ])  ;    }    int x = 1;    for (   ; x <= P.length ; x ++ )    {        printf("%d\n", P.elem[ x ])  ;    }    ClearList ( M ) ;    ClearList ( N ) ;    ClearList ( P ) ;    DestroyList ( M ) ;    DestroyList ( N ) ;    DestroyList ( P ) ;        return 0 ;}


原创粉丝点击