#include<stdio.h> //输入输出函数头文件
#include<stdlib.h> //内存申请函数头文件
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int ElemType ;
typedef struct
{
ElemType* elem ; //存储空间基址
int length ; //当前长度
int listsize ; //当前分配的存储容量(以sizeof(ElemType)为单位)
}Sqlist ;
//操作结构,构造一个空的线性表L
void 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,否则返回FALSE
int 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 ;
}
重学数据结构之算法2.7
最新推荐文章于 2021-05-23 17:33:55 发布