#ifndef _LISTTEST_H_
#define _LISTTEST_H_
typedef struct Student
{
char name[16];
int src;
struct Student *parent;
struct Student *next;
}Student,*p_Student;
typedef struct DataNode
{
struct DataNode *pNext;
void *data;
}DataNode,*p_DataNode;
typedef struct ListHead
{
int size;
p_DataNode headNode;
}ListHead, *p_ListHead;
#endif
#include "stdio.h"
#include "ListTest.h"
#include "malloc.h"
#include "string.h"
p_ListHead studentList=NULL;
void add_node(p_Student *node)
{
p_DataNode *tp_node=NULL, *tq_node=NULL;
p_DataNode datanNode=NULL, *tmp=NULL;
if(NULL==studentList||NULL==node)
{
return;
}
studentList->size=studentList->size+1;
tp_node=&studentList->headNode;
datanNode = ( p_DataNode )malloc( sizeof( ListHead ));
memset( datanNode, 0x0, sizeof( ListHead ));
if(NULL==(*tp_node))
{
//添加链表头
tp_node=&datanNode;
(*tp_node)->data=(*node);
studentList->headNode=*tp_node;
return;
}
while(tp_node)
{
if(NULL==(*tp_node)->pNext)
{
(*tp_node)->pNext=datanNode;
(*tp_node)->pNext->data=(*node);
break;
}
tp_node=&(*tp_node)->pNext;
}
}
void rm_node(p_Student *node)
{
p_DataNode *tp_node=NULL, *tq_node=NULL, tmp=NULL;
Student sinfo={0};
int flag=0;
if(NULL==studentList||NULL==node)
{
return;
}
tp_node=&studentList->headNode;
while(tp_node)
{
if(NULL!=(*tp_node)->data)
{
memcpy(&sinfo,(*tp_node)->data,sizeof(Student));
if(0==strcmp(sinfo.name, (*node)->name))
{
flag=1;
break;
}
}
tq_node=&(*tp_node);
tp_node=&(*tp_node)->pNext;
}
if(0!=flag && NULL==tq_node)
{
//释放链表头
tq_node=&(*tp_node);
tmp=((*tp_node))->pNext;
free((*tp_node)->data);
(*tp_node)->data=NULL;
free((*tp_node));
(*tp_node)=NULL;
(*tq_node)=tmp;
}
else if(1==flag && NULL!=tq_node)
{
//释放链表节点
tmp=((*tp_node))->pNext;
free((*tp_node)->data);
(*tp_node)->data=NULL;
free((*tp_node));
(*tp_node)=NULL;
(*tq_node)->pNext=tmp;
}
return;
}
int main( void )
{
p_Student nodeInfo = NULL,nodeInfo_1 = NULL,nodeInfo_2 = NULL;
studentList = ( p_ListHead )malloc( sizeof( ListHead ));
memset( studentList, 0x0, sizeof( ListHead ));
studentList->size=0;
studentList->headNode=NULL;
nodeInfo=(p_Student)malloc(sizeof(Student));
memset(nodeInfo, 0x0, sizeof( Student ));
strcpy(nodeInfo->name,"nodeInfo");
nodeInfo_1=(p_Student)malloc(sizeof(Student));
memset(nodeInfo_1, 0x0, sizeof( Student ));
strcpy(nodeInfo_1->name,"nodeInfo_1");
nodeInfo_2=(p_Student)malloc(sizeof(Student));
memset(nodeInfo_2, 0x0, sizeof( Student ));
strcpy(nodeInfo_2->name,"nodeInfo_2");
add_node(&nodeInfo);
add_node(&nodeInfo_1);
add_node(&nodeInfo_2);
rm_node(&nodeInfo_2);
rm_node(&nodeInfo_1);
rm_node(&nodeInfo);
return 0;
}
ListTest.rar
阅读(1217) | 评论(0) | 转发(0) |