# include <iostream>
using namespace std;
# define LIST_INIT_SIZE 100
# define LISTINCREMENT 10
# define OK 1
# define ERROR - 1
typedef int Status;
typedef int ElemType;
typedef struct
{
ElemType* elem;
int length;
int listsize;
} Sqlist;
Status InitList ( Sqlist& L)
{
L. elem = new ElemType[ LIST_INIT_SIZE] ;
if ( ! L. elem) exit ( OVERFLOW) ;
L. length = 0 ;
L. listsize = LIST_INIT_SIZE;
return OK;
}
Status GetElem ( Sqlist& L, int i, ElemType& e)
{
if ( ( i < 0 ) || ( i > L. length) ) return ERROR;
e = L. elem[ i - 1 ] ;
return OK;
}
int LocateElem ( Sqlist& L, int i, ElemType e)
{
if ( ( i < 0 ) || ( i > L. length) ) return ERROR;
for ( int i = 0 ; i < L. length - 1 ; i-- )
{
if ( L. elem[ i] == e)
return i + 1 ;
}
return 0 ;
}
Status ListInsert ( Sqlist& L, int i, ElemType e)
{
if ( ( i < 1 ) || ( i > L. length + 1 ) ) return ERROR;
if ( L. length >= L. listsize) return ERROR;
ElemType* newbase = ( ElemType* ) realloc ( L. elem, ( L. listsize + LISTINCREMENT) * sizeof ( ElemType) ) ;
if ( ! newbase) return ERROR;
L. elem = newbase;
L. listsize += LISTINCREMENT;
for ( int j = L. length - 1 ; j > i - 1 ; j-- )
L. elem[ j + 1 ] = L. elem[ j] ;
L. elem[ i - 1 ] = e;
++ L. length;
return OK;
}
Status Listdelete ( Sqlist& L, int i, ElemType e)
{
if ( ( i < 1 ) || ( i > L. length) ) return ERROR;
e = L. elem[ i - 1 ] ;
for ( int j = i; j <= L. length - 1 ; j++ )
{
L. elem[ j - 1 ] = L. elem[ j] ;
-- L. length;
}
return OK;
}
void PrintList ( Sqlist& L)
{
int n = L. length;
for ( int i = 0 ; i < n; i++ )
{
ElemType e;
GetElem ( L, i + 1 , e) ;
cout << e << " " ;
}
cout << endl;
}
int main ( )
{
Sqlist La, Lb, Lc;
InitList ( La) ;
InitList ( Lb) ;
InitList ( Lc) ;
int a[ ] = { 1 , - 7 , - 4 , 9 , 8 } ;
int b[ ] = { 8 , - 3 , 9 , - 6 , 7 , } ;
int na = sizeof ( a) / sizeof ( int ) ;
int nb = sizeof ( b) / sizeof ( int ) ;
for ( int i = 0 ; i < na; i++ ) ListInsert ( La, i, a[ i] ) ;
for ( int j = 0 ; j < nb; j++ ) ListInsert ( Lb, j, b[ j] ) ;
PrintList ( La) ;
PrintList ( Lb) ;
return 0 ;
}