文章目录 1.什么是线性表? 2.线性表的抽象数据类型 3.线性表之顺序表的C语言实现 4.线性表之链式表的C语言实现
1.什么是线性表?
2.线性表的抽象数据类型
3.线性表之顺序表的C语言实现
#include <stdio.h>
#include <stdlib.h> #define ElementType int
#define MAXSIZE 5
typedef struct LNode * List;
struct LNode{ ElementType Data[ MAXSIZE] ; int Last;
} ;
struct LNode L;
List PtrL;
List MakeEmpty ( )
{ List PtrL; PtrL = ( List) malloc ( sizeof ( struct LNode) ) ; PtrL-> Last = - 1 ; return PtrL;
}
int Find ( ElementType x, List PtrL)
{ int i= 0 ; while ( i<= PtrL-> Last&& PtrL-> Data[ i] != x) { i++ ; } if ( i> PtrL-> Last) { return - 1 ; } else return i;
}
void Insert ( ElementType x, int i, List PtrL)
{ int j; if ( PtrL-> Last== MAXSIZE- 1 ) { printf ( "表已满\n" ) ; return ; } if ( i< 1 || i> PtrL-> Last+ 2 ) { printf ( "位置不合法\n" ) ; return ; } for ( j= PtrL-> Last; j>= i- 1 ; j-- ) { PtrL-> Data[ j+ 1 ] = PtrL-> Data[ j] ; } PtrL-> Data[ i- 1 ] = x; PtrL-> Last++ ; return ;
}
void Delete ( int i, List PtrL)
{ int j; if ( i< 1 || i> PtrL-> Last+ 1 ) { printf ( "不存在第%d个元素\n" , i) ; } for ( j= i; j<= PtrL-> Last; j++ ) { PtrL-> Data[ j- 1 ] = PtrL-> Data[ j] ; } PtrL-> Last-- ; return ;
} int main ( )
{ PtrL = MakeEmpty ( ) ; PtrL-> Data[ 0 ] = 12 ; PtrL-> Data[ 1 ] = 15 ; PtrL-> Data[ 2 ] = 51 ; PtrL-> Last= 2 ; for ( int i= 0 ; i<= ( PtrL-> Last) ; i++ ) { printf ( "%d " , PtrL-> Data[ i] ) ; } printf ( "\n" ) ; return 0 ;
}
4.线性表之链式表的C语言实现
#include <stdio.h>
#include <stdlib.h> #define Element int
typedef struct LNode * List;
struct LNode{ Element Data; List Next;
} ; struct LNode L;
List PtrL;
List Empty ( )
{ List PtrL; PtrL = ( List) malloc ( sizeof ( struct LNode) ) ; PtrL-> Next= NULL ; return PtrL;
}
int Length ( List PtrL)
{ List p = PtrL; int j= 0 ; while ( p) { p = p-> Next; j++ ; } return j;
}
List FindKth ( int K, List PtrL)
{ int i= 1 ; List p = PtrL; while ( p!= NULL && i< K) { p= p-> Next; i++ ; } if ( i== K) { return p; } else { return NULL ; }
}
List Find ( Element X, List PtrL)
{ List p= PtrL; while ( p!= NULL && p-> Data!= X) { p= p-> Next; } return p;
}
List Insert ( Element X, int i, List PtrL)
{ List p, s; if ( i== 1 ) { s= ( List) malloc ( sizeof ( struct LNode) ) ; s-> Data= X; s-> Next= PtrL; return s; } p= FindKth ( i- 1 , PtrL) ; if ( p== NULL ) { printf ( "参数错误\n" ) ; return NULL ; } else { s= ( List) malloc ( sizeof ( struct LNode) ) ; s-> Data= X; s-> Next= p-> Next; p-> Next= s; return PtrL; }
}
List Delete ( int K, List PtrL)
{ List p, s; if ( K== 1 ) { s= PtrL; if ( PtrL!= NULL ) { PtrL= PtrL-> Next; } else { return NULL ; } free ( s) ; return PtrL; } p= FindKth ( K- 1 , PtrL) ; if ( p== NULL ) { printf ( "第%d个结点不存在\n" , K- 1 ) ; return NULL ; } else if ( p-> Next== NULL ) { printf ( "第%d个结点不存在\n" , K) ; return NULL ; } else { s= p-> Next; p-> Next= s-> Next; free ( s) ; return PtrL; }
} int main ( )
{ PtrL = Empty ( ) ; PtrL = Insert ( 32 , 1 , PtrL) ; PtrL = Insert ( 56 , 2 , PtrL) ; PtrL = Insert ( 35 , 3 , PtrL) ; PtrL = Insert ( 52 , 4 , PtrL) ; return 0 ;
}