一、链式的理解
二、结构体
2.1 数据结构体
struct MM
{
char name[ 20 ] ;
int age;
} ;
2.2 添加键值结构体
struct Data
{
int index;
struct MM mmData;
} ;
2.3 节点
typedef struct Node
{
struct Data data;
struct Node* next;
} NODE, * LPNODE;
2.4 添加个数
typedef struct sqList
{
LPNODE headNode;
int sqListSize;
} SQL, * LPSQL;
三、封装节点与表头
3.1 创建节点
LPNODE createNode ( struct Data data)
{
LPNODE newNode = ( LPNODE) malloc ( sizeof ( NODE) ) ;
if ( newNode == NULL )
{
return NULL ;
}
newNode-> data = data;
newNode-> next = NULL ;
return newNode;
}
3.2 创建表头
LPNODE createList ( )
{
LPNODE headNode = ( LPNODE) malloc ( sizeof ( NODE) ) ;
if ( headNode == NULL )
{
return NULL ;
}
headNode-> next = NULL ;
return headNode;
}
四、封装整个表
LPSQL createSqList ( )
{
LPSQL sqList = ( LPSQL) malloc ( sizeof ( SQL) ) ;
if ( sqList == NULL )
{
return NULL ;
}
sqList-> headNode = createList ( ) ;
sqList-> sqListSize = 0 ;
return sqList;
}
五、插入数据
void insertData ( LPSQL sqList, struct Data data)
{
LPNODE newNode = createNode ( data) ;
LPNODE leftPos = sqList-> headNode;
LPNODE posNode = sqList-> headNode-> next;
while ( posNode != NULL && posNode-> data. index < data. index)
{
leftPos = posNode;
posNode = leftPos-> next;
}
leftPos-> next = newNode;
newNode-> next = posNode;
sqList-> sqListSize++ ;
}
六、删除数据
void delete ( LPSQL sqList, int index)
{
LPNODE leftNode = sqList-> headNode-> next;
LPNODE rightNode = sqList-> headNode-> next;
while ( rightNode != NULL && rightNode-> data. index!= index)
{
leftNode = rightNode;
rightNode = leftNode-> next;
}
if ( leftNode == NULL )
{
printf ( "此列表没有数据!无法删除!\n" ) ;
}
if ( rightNode == NULL )
{
printf ( "此列表没有该人!无法删除!\n" ) ;
}
else
{
printf ( "删除成功!\n" ) ;
leftNode-> next = rightNode-> next;
free ( rightNode) ;
rightNode= NULL ;
sqList-> sqListSize-- ;
}
}
七、打印
void printSqList ( LPSQL sqList)
{
LPNODE pMove = sqList-> headNode-> next;
while ( pMove != NULL )
{
printf ( "%d:%s\t%d\n" , pMove-> data. index, pMove-> data. mmData. name, pMove-> data. mmData. age) ;
pMove = pMove-> next;
}
}
八、主函数
int main ( void )
{
srand ( ( unsigned int ) time ( 0 ) ) ;
LPSQL sqList = createSqList ( ) ;
for ( int i = 0 ; i < 3 ; i++ )
{
struct Data data = { rand ( ) % 3 , "wd" , rand ( ) % 3 } ;
insertData ( sqList, data) ;
}
printSqList ( sqList) ;
delete ( sqList, rand ( ) % 3 ) ;
printSqList ( sqList) ;
return 0 ;
}
九、调试结果
9.1 没有找到
9.2 找到了并删除成功