# include <stdio.h>
# include <stdlib.h>
# define InitSize 10
typedef int ElemType;
typedef struct {
ElemType * data;
ElemType MaxSize;
ElemType length;
} SqList;
void PrintList ( SqList L) ;
void InitList ( SqList & L) {
L. data = ( ElemType * ) malloc ( InitSize * sizeof ( ElemType) ) ;
L. MaxSize = InitSize;
L. length = 0 ;
}
int InsertList ( SqList & L, int i, int e) {
if ( i < 1 || i > L. length || L. length == L. MaxSize)
return 0 ;
for ( int j = L. length; j >= i; j-- ) {
L. data[ j] = L. data[ j - 1 ] ;
}
L. data[ i - 1 ] = e;
L. length++ ;
return 1 ;
}
int DeleteList ( SqList & L, ElemType i, ElemType & e) {
if ( i < 0 || i >= L. length)
return 0 ;
printf ( "删除顺序表第%d个位置数据:%d\n" , i, L. data[ i - 1 ] ) ;
for ( int j = i - 1 ; j < L. length - 1 ; j++ ) {
L. data[ j] = L. data[ j + 1 ] ;
}
L. length-- ;
return 1 ;
}
int AlterList ( SqList & L, int i, int e) {
if ( i < 0 || i > L. length - 1 )
return 0 ;
L. data[ i - 1 ] = e;
return 1 ;
}
int GetList ( SqList L, int i) {
if ( i < 0 || i > L. length) {
printf ( "error" ) ;
return 0 ;
}
return L. data[ i - 1 ] ;
}
int LocatedList ( SqList L, int e) {
for ( int i = 0 ; i < L. length; i++ ) {
if ( e == L. data[ i] )
return i + 1 ;
}
return 0 ;
}
int Length ( SqList L) {
return L. length;
}
bool IsEmpty ( SqList L) {
if ( L. length == 0 )
return true;
return false;
}
void PrintList ( SqList L) {
for ( int i = 0 ; i < L. length; i++ ) {
printf ( "data[%d]=%d\n" , i, L. data[ i] ) ;
}
}
void DestoryList ( SqList & L ) {
free ( L. data) ;
L. length = 0 ;
L. MaxSize = 0 ;
}
void IncreaseSize ( SqList & L, ElemType len) {
ElemType * p = L. data;
L. data = ( int * ) malloc ( ( L. MaxSize + len) * sizeof ( ElemType) ) ;
for ( ElemType i = 0 ; i < L. length; i++ ) {
L. data[ i] = p[ i] ;
}
L. MaxSize += len;
free ( p) ;
}
int main ( ) {
SqList L;
InitList ( L) ;
L. length = InitSize;
for ( ElemType i = 0 ; i < L. MaxSize; i++ ) {
L. data[ i] = i;
}
int e;
printf ( "删除flag=%d\n" , DeleteList ( L, 5 , e) ) ;
PrintList ( L) ;
printf ( "插入flag=%d\n" , InsertList ( L, 2 , 66 ) ) ;
PrintList ( L) ;
printf ( "修改flag=%d\n" , AlterList ( L, 1 , 88 ) ) ;
PrintList ( L) ;
printf ( "按位查找%d\n" , GetList ( L, 5 ) ) ;
printf ( "按值查找%d\n" , LocatedList ( L, 88 ) ) ;
printf ( "顺序表的表长为%d\n" , Length ( L) ) ;
printf ( "顺序表是否为空%d\n" , IsEmpty ( L) ) ;
printf ( "MaxSize ==%d\n" , L. MaxSize) ;
IncreaseSize ( L, 8 ) ;
printf ( "MaxSize ==%d\n" , L. MaxSize) ;
DestoryList ( L) ;
PrintList ( L) ;
}