顺序结构
头定义
#define MAXSIZE 20
typedef int Elemtype;
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
结构定义
typedef struct
{
Elemtype data[ MAXSIZE] ;
int length;
} sqlist;
获得线性表元素
Status GetElem ( sqlist L, int i, Elemtype * e)
{
if ( L. length== 0 || i > L. length)
return ERROR;
* e = L. data[ i- 1 ] ;
return OK;
}
插入元素操作
Status Insert ( sqlist * L, int i, Elemtype e)
{
if ( L-> length== MAXSIZE || i > L-> length)
return ERROR;
if ( i< 1 || i> L-> length+ 1 )
return ERROR;
for ( i; i < L-> length; i++ )
{
L-> data[ i] = L-> data[ i- 1 ] ;
}
L-> data[ i- 1 ] = e;
L-> length++ ;
return OK;
}
删除元素操作
Status ListDelete ( sqlist * L, int i, Elemtype * e)
{
int k;
if ( L-> length == 0 )
return ERROR;
if ( i < 1 || i > L-> length)
return ERROR;
* e = L-> data[ i - 1 ] ;
for ( k = i - 1 ; k < L-> length; i++ )
L-> data[ i- 1 ] = L-> data[ i] ;
L-> length-- ;
return ERROR;
}
链式结构
结构定义
typedef struct Node
{
Elemtype data;
struct Node * next;
} Node;
typedef struct Node * LinkList;
获得线性表元素
Status GetElem ( LinkList L, int i, Elemtype * e)
{
int j;
LinkList p;
p = L-> next;
j = 1 ;
while ( p && j< i)
{
p = p-> next;
++ j;
}
if ( ! p || j> i)
return ERROR;
* e = p-> data;
return OK;
}
插入元素操作
Status ListInsert ( LinkList * L, int i, Elemtype e)
{
int j;
LinkList p, s;
p = * L;
j = 1 ;
while ( p && j< i)
{
p = p-> next;
++ j;
}
if ( ! p || j> i)
return ERROR;
s = ( LinkList) malloc ( sizeof ( Node) ) ;
s-> data = e;
s-> next = p-> next;
p-> next = s;
return OK;
}
删除元素操作
Status ListDelete ( LinkList * L, int i, Elemtype * e)
{
int j;
LinkList p;
p = * L;
j = 1 ;
while ( p && j< i)
{
p = p-> next;
++ j;
}
if ( ! p || j> i)
return ERROR;
* e = p-> next-> data;
p-> next = p-> next-> next;
free ( p-> next) ;
return OK;
}
单链表的整表创建
头插法
void CreatListHead ( LinkList * L, int n)
{
LinkList p;
int i;
srand ( time ( 0 ) ) ;
* L = ( LinkList) malloc ( sizeof ( Node) ) ;
( * L) -> next = NULL ;
for ( i= 0 ; i< n; i++ )
{
p = ( LinkList) malloc ( sizeof ( Node) ) ;
p-> data = rand ( ) % 100 + 1 ;
p-> next = ( * L) -> next;
( * L) -> next = p;
}
}
尾插法
void CreatListTail ( LinkList * L, int n)
{
LinkList p, r;
int i;
srand ( time ( 0 ) ) ;
* L = ( LinkList) malloc ( sizeof ( Node) ) ;
r = * L;
for ( i= 0 ; i< n; i++ )
{
p = ( LinkList) malloc ( sizeof ( Node) ) ;
p-> data = rand ( ) % 100 + 1 ;
r-> next = p;
r = p;
}
r-> next = NULL ;
}
单链表的整表删除
Status ClearList ( LinkList * L)
{
LinkList p, q;
p = ( * L) -> next;
while ( p)
{
q = p-> next;
free ( p) ;
p = q;
}
( * L) -> next = NULL ;
return OK;
}