# include <stdio.h>
# include <stdlib.h>
# define MAXSIZE 100
# define OK true
# define ERROR false
# define Status bool
# define OVERFLOW - 2
typedef struct {
char name[ 20 ] ;
int count;
} Book;
typedef struct {
Book * elem;
int length;
} SqList;
Status initList ( SqList & s) {
s. elem = new Book[ MAXSIZE] ;
if ( ! s. elem) {
exit ( OVERFLOW) ;
}
s. length = 0 ;
return OK;
}
void DestroyList ( SqList & s) {
if ( s. elem) {
delete s. elem;
}
}
void ClearList ( SqList & s) {
s. length = 0 ;
}
int GetLength ( SqList & s) {
return s. length;
}
int IsEmpty ( SqList & s) {
return s. length == 0 ? 1 : 0 ;
}
int GetElem ( SqList & s, int i, Book & b) {
if ( i < 1 || i > s. length || s. length == 0 || ! s. elem) {
return ERROR;
}
b = s. elem[ i- 1 ] ;
return OK;
}
int LocationElem ( SqList & s, Book & b) {
if ( IsEmpty ( s) ) {
return ERROR;
}
Book * book = s. elem;
for ( int i= 0 ; i<= 0 ; i++ ) {
if ( b. name == book[ i] . name) {
return i;
}
}
return ERROR;
}
void AddCapacity ( SqList & s) {
if ( s. length > MAXSIZE) {
Book * books = new Book[ MAXSIZE * 2 ] ;
for ( int i = 0 ; i< s. length; i++ ) {
books[ i] = s. elem[ i] ;
}
s. elem = books;
}
}
int addElem ( SqList & s, Book & b) {
if ( ! s. elem) {
return ERROR;
}
AddCapacity ( s) ;
s. elem[ s. length] = b;
s. length++ ;
return OK;
}
int insertElem ( SqList & s, Book & b, int location) {
if ( location < 1 || location > s. length+ 1 ) return ERROR;
if ( ! s. elem) {
return ERROR;
}
AddCapacity ( s) ;
Book temp;
for ( int i= location- 1 ; i< s. length; i++ ) {
temp = s. elem[ i] ;
s. elem[ i] = b;
b = temp;
}
s. elem[ s. length] = b;
s. length++ ;
return OK;
}
int insertElem02 ( SqList & s, Book & b, int location) {
if ( location < 1 || location > s. length+ 1 ) return ERROR;
if ( ! s. elem) {
return ERROR;
}
AddCapacity ( s) ;
for ( int i= s. length- 1 ; i>= location- 1 ; i-- ) {
s. elem[ i+ 1 ] = s. elem[ i] ;
}
s. elem[ location- 1 ] = b;
s. length++ ;
return OK;
}
int DeleteElem ( SqList & s, int location, Book & b) {
if ( ! s. elem || s. length == 0 || location < 0 || location > s. length) {
return ERROR;
}
b = s. elem[ location- 1 ] ;
for ( int i= location- 1 ; i<= s. length- 1 ; i++ ) {
s. elem[ i] = s. elem[ i+ 1 ] ;
}
s. length-- ;
return OK;
}
void print ( SqList & s) {
if ( ! s. elem || s. length == 0 ) {
return ;
}
for ( int i= 0 ; i< s. length; i++ ) {
printf ( "%s " , s. elem[ i] . name) ;
}
}
int main ( ) {
SqList l;
initList ( l) ;
Book book = { "123" , 12 } ;
addElem ( l, book) ;
Book book1 = { "124" , 13 } ;
addElem ( l, book1) ;
Book book2 = { "125" , 13 } ;
addElem ( l, book2) ;
Book b3 = { "137" , 89 } ;
insertElem02 ( l, b3, 4 ) ;
print ( l) ;
printf ( "\n" ) ;
Book del;
DeleteElem ( l, 4 , del) ;
print ( l) ;
}