顺序表的基本操作
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct {
int * elem;
int length;
int listsize;
} SqList;
int InitList_Sq ( SqList& L) {
L. elem= ( int * ) malloc ( LIST_INIT_SIZE* sizeof ( int ) ) ;
if ( ! L. elem) exit ( 1 ) ;
L. length = 0 ;
L. listsize = LIST_INIT_SIZE;
return 1 ;
}
int ListInsert_Sq ( SqList& L, int i, int e) {
int * newbase;
if ( i< 1 || i> L. length + 1 ) return 0 ;
if ( L. length>= L. listsize ) {
newbase= ( int * ) realloc ( L. elem, ( L. listsize+ LISTINCREMENT) * sizeof ( int ) ) ;
if ( ! newbase) exit ( 1 ) ;
L. elem = newbase;
L. listsize + = LISTINCREMENT;
}
int * p;
int * q= & ( L. elem [ i- 1 ] ) ;
for ( p= & ( L. elem [ L. length - 1 ] ) ; p>= q; -- p) * ( p+ 1 ) = * p;
* q= e;
++ L. length;
return 1 ;
}
int ListDelete_Sq ( SqList & L, int i, int & e)
{
if ( ( i< 1 ) || ( i> L. length) ) return 0 ;
int * p= & ( L. elem[ i- 1 ] ) ;
e= * p;
int * q= L. elem+ L. length- 1 ;
for ( ++ p; p<= q; ++ p) * ( p- 1 ) = * p;
-- L. length ;
return 1 ;
}
int LocateElem_Sq ( SqList L, int e, int ( * compare) ( int , int ) )
{
int i= 1 ;
int * p= L. elem;
while ( i<= L. length && ! ( * compare) ( * p++ , e) ) ++ i;
if ( i<= L. length) return i;
else return 0 ;
}
int print ( SqList L)
{ printf ( "当前顺序表中元素为:" ) ;
for ( int i= 0 ; i< L. length ; i++ )
printf ( "%d" , L. elem [ i] ) ;
printf ( "\n" ) ;
return 0 ;
}
int main ( ) {
SqList L;
InitList_Sq ( L) ;
int e;
printf ( "请输入10位数学号:" ) ;
for ( int i= 0 ; i< 10 ; i++ )
{
scanf ( "%d" , & e) ;
L. elem[ i] = e;
L. length++ ;
}
print ( L) ;
printf ( "在第二个位置插入8\n" ) ;
ListInsert_Sq ( L, 2 , 8 ) ;
print ( L) ;
int g;
printf ( "删除第2个位置上的元素\n" ) ;
ListDelete_Sq ( L, 2 , g) ;
printf ( "其值为%d\n" , g) ;
print ( L) ;
}