顺序表
1. 创建数组的方式建立顺序表实现增删改查
# include "stdio.h"
在中间删除或增加元素,那么效率是比较低的,因为需要移动大量的元素
int arr[ 100 ] ;
int len = 0 ;
int maxSize = 100 ;
void insert1 ( int data)
{
if ( len < maxSize)
{
arr[ len] = data;
len++ ;
}
}
void insert2 ( int data, int val)
{
int n = 0 ;
for ( int i = 0 ; i < len; i++ )
{
if ( arr[ i] == val)
{
len++ ;
for ( n = len; n> i; n-- )
{
arr[ n - 1 ] = arr[ n - 2 ] ;
}
arr[ n] = data;
return ;
}
}
}
void print ( )
{
for ( int i = 0 ; i < len; i++ )
{
printf ( "%d\t" , arr[ i] ) ;
}
printf ( "\n" ) ;
}
void change ( int data, int val)
{
for ( int i = 0 ; i < len; i++ )
{
if ( arr[ i] == val)
{
arr[ i] = data;
printf ( "\n" ) ;
return ;
}
}
printf ( "\n" ) ;
}
void find ( int val)
{
for ( int i = 0 ; i < len; i++ )
{
if ( arr[ i] == val)
{
printf ( "\n该元素的下标为%d值为:%d\n" , i, arr[ i] ) ;
}
}
}
void del ( int val)
{
for ( int i = 0 ; i < 10 ; i++ )
{
if ( arr[ i] == val)
{
for ( int n = i; n < len; n++ )
{
arr[ n] = arr[ n + 1 ] ;
}
len-- ;
}
}
}
int main ( )
{
insert1 ( 4 ) ;
insert1 ( 5 ) ;
insert1 ( 5 ) ;
insert1 ( 6 ) ;
insert1 ( 7 ) ;
insert1 ( 8 ) ;
insert1 ( 9 ) ;
print ( ) ;
insert2 ( 55 , 5 ) ;
print ( ) ;
return 0 ;
}
2.指针的方式实现顺序表的增删改查
# include "stdio.h"
# include "stdlib.h"
void initArr ( int * * buff, int * max)
{
* max = 10 ;
* buff = ( int * ) malloc ( sizeof ( int ) * ( * max) ) ;
memset ( * buff, 0 , sizeof ( int ) * ( * max) ) ;
}
void print ( int * p, int len)
{
for ( int i = 0 ; i < len; i++ )
{
printf ( "%d\t" , p[ i] ) ;
}
printf ( "\n" ) ;
}
void insert ( int * * p, int data, int * len, int * max)
{
if ( * len >= * max)
{
* max = * max + ( ( * max) / 2 ) ;
int * tempBuff = ( int * ) malloc ( sizeof ( int ) * ( * max) ) ;
for ( int i = 0 ; i < * len; i++ )
{
tempBuff[ i] = ( * p) [ i] ;
}
free ( * p) ;
* p = tempBuff;
printf ( "%d,%d\n" , * len, * max) ;
}
( * p) [ * len] = data;
( * len) ++ ;
}
void del ( int * p, int val, int * len)
{
for ( int i = 0 ; i < * len; i++ )
{
if ( p[ i] == val)
{
for ( int n = i; n < * len; n++ )
{
p[ n] = p[ n + 1 ] ;
}
( * len) -- ;
}
}
}
void change ( int * p, int val, int data, int * len)
{
for ( int i = 0 ; i < * len; i++ )
{
if ( p[ i] == val)
{
p[ i] = data;
}
}
}
void find ( int * p, int val, int * len)
{
for ( int i = 0 ; i < * len; i++ )
{
if ( p[ i] == val)
{
printf ( "你要找的元素是%d下标为:%d\n" , p[ i] , i) ;
}
}
}
int main ( )
{
int * buff = NULL ;
int len = 0 ;
int maxSize = 0 ;
initArr ( & buff, & maxSize) ;
printf ( "%d,%d\n" , len, maxSize) ;
for ( int i = 0 ; i < 100 ; i++ )
{
insert ( & buff, i + 1 , & len, & maxSize) ;
}
find ( buff, 55 , & len) ;
del ( buff, 6 , & len) ;
change ( buff, 66 , 999 , & len) ;
print ( buff, len) ;
free ( buff) ;
return 0 ;
}
3.创建结构体的方式实现顺序表
# include "stdio.h"
typedef struct
{
int arr[ 10 ] ;
int len;
int maxSize;
} node;
node n;
void init ( )
{
n. len = 0 ;
n. maxSize = 10 ;
}
void insert ( int data)
{
if ( n. len < n. maxSize)
{
n. arr[ n. len] = data;
n. len++ ;
}
}
void print ( )
{
for ( int i = 0 ; i < n. len; i++ )
{
printf ( "%d\t" , n. arr[ i] ) ;
}
printf ( "\n" ) ;
}
void change ( int data, int val)
{
for ( int i = 0 ; i < n. len; i++ )
{
if ( n. arr[ i] == val)
{
n. arr[ i] = data;
return ;
}
}
}
void find ( int val)
{
for ( int i = 0 ; i < n. len; i++ )
{
if ( n. arr[ i] == val)
{
printf ( "你要找的元素是%d下标为:%d\n" , n. arr[ i] , i) ;
}
}
}
void del ( int val)
{
for ( int i = 0 ; i < 10 ; i++ )
{
if ( n. arr[ i] == val)
{
for ( int j = i; j < n. len; j++ )
{
n. arr[ j] = n. arr[ j + 1 ] ;
}
n. len-- ;
i-- ;
}
}
}
void fun ( )
{
FILE * file;
file = fopen ( "1.txt" , "w" ) ;
char str[ 10 ] = { 0 } ;
for ( int i = 0 ; i < n. len; i++ )
{
sprintf ( str, "%d" , n. arr[ i] ) ;
fputs ( str, file) ;
}
fclose ( file) ;
}
int main ( )
{
init ( ) ;
insert ( 4 ) ;
insert ( 5 ) ;
insert ( 5 ) ;
insert ( 6 ) ;
insert ( 7 ) ;
insert ( 8 ) ;
insert ( 9 ) ;
fun ( ) ;
print ( ) ;
return 0 ;
}