重学数据结构之算法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 ;}