.h
typedef struct LINKNODE
{
struct LINKNODE* next;//下一个节点
}LinkNode;
typedef struct LINKLIST
{
LinkNode head;
int size;
}LinkList;
//打印函数指针
typedef void(*PRINTNODE)(LinkNode* Address);
//比较函数指针
typedef int(*COMPARENODE)(LinkNode*, LinkNode*);
class List
{
public:
List();
~List();
public:
LinkNode* linknode;
LinkList* linklist;
public:
//插入
void Insert_LinkList(LinkList* list,int pos, LinkNode* data);
//删除
void Remove_LinkList(LinkList* list, int pos);
//查找
int Find_LinkList(LinkList* list, LinkNode* data, COMPARENODE cmp);
//返回链表大小
int Size_LinkList(LinkList* list);
//打印
void Print_LinkList(LinkList* list, PRINTNODE print);
};
.cpp
List::List()
{
linklist = new LinkList;
linklist->head.next = NULL;
linklist->size = 0;
}
List::~List()
{
if (linklist == NULL)
return;
delete linklist;
}
//插入
void List::Insert_LinkList(LinkList* list, int pos, LinkNode* data)
{
if (list == NULL || data == NULL)
return;
if (pos < 0 || pos > list->size)
pos = list->size;
//查找插入位置
LinkNode* pCurrent = &(list->head);
for (int i = 0; i < pos; i++)
{
pCurrent = pCurrent->next;
}
//插入新节点
data->next = pCurrent->next;
pCurrent->next = data;
list->size++;
}
//删除
void List::Remove_LinkList(LinkList* list, int pos)
{
if (list == NULL)
return ;
if (pos < 0 || pos>= list->size)
return;
//辅助指针
LinkNode* pCurrent = &list->head;
for (int i = 0; i < pos; i++)
{
pCurrent = pCurrent->next;
}
//删除节点
pCurrent->next = pCurrent->next->next;
list->size--;
}
//查找
int List::Find_LinkList(LinkList* list, LinkNode* data, COMPARENODE cmp)
{
if (list == NULL || list == NULL)
return -1;
//辅助指针
LinkNode* pCurrent = list->head.next;
int index = 0;
int flag = -1;
while (pCurrent != NULL)
{
if (cmp(pCurrent, data) == 0)
{
flag = index;
break;
}
pCurrent = pCurrent->next;
index++;
}
return flag;
}
//返回链表大小
int List::Size_LinkList(LinkList* list)
{
return list->size;
}
//打印
void List::Print_LinkList(LinkList* list, PRINTNODE print)
{
if (list == NULL)
{
return;
}
//辅助指针
LinkNode* pCurrent = list->head.next;
while (pCurrent != NULL)
{
print(pCurrent);
pCurrent = pCurrent->next;
}
}
main.cpp
typedef struct PERSON
{
LinkNode Node;
char Name[64];
int age;
}Person;
void MyPrint(LinkNode* data)
{
Person* p = (Person*)data;
cout << "addr:" << data << " ";
cout << "Name:" << p->Name << " ";
cout << "Age:" << p->age << " ";
cout << endl;
}
int MyCompare(LinkNode* node1,LinkNode* node2)
{
Person* p1 = (Person*)node1;
Person* p2 = (Person*)node2;
if (strcmp(p1->Name,p2->Name)==0 && p1->age == p2->age)
{
return 0;
}
return -1;
}
int main()
{
List* l = new List();
//创建数据
Person p1, p2, p3, p4, p5;
strcpy(p1.Name, "p1");
strcpy(p2.Name, "p2");
strcpy(p3.Name, "p3");
strcpy(p4.Name, "p4");
strcpy(p5.Name, "p5");
p1.age = 10;
p2.age = 20;
p3.age = 30;
p4.age = 40;
p5.age = 50;
//将节点插入链表
l->Insert_LinkList(l->linklist, 0, (LinkNode*)&p1);
l->Insert_LinkList(l->linklist, 0, (LinkNode*)&p2);
l->Insert_LinkList(l->linklist, 0, (LinkNode*)&p3);
l->Insert_LinkList(l->linklist, 0, (LinkNode*)&p4);
l->Insert_LinkList(l->linklist, 0, (LinkNode*)&p5);
//打印
l->Print_LinkList(l->linklist, MyPrint);
cout << "--------------------------------------" << endl;
//删除节点
l->Remove_LinkList(l->linklist,4);
l->Print_LinkList(l->linklist, MyPrint);
//查找
Person Find;
strcpy(Find.Name,"p2");
Find.age = 20;
int pos = l->Find_LinkList(l->linklist,(LinkNode*)&Find, MyCompare);
cout << "位置:"<<pos << endl;
cout << "--------------------------------------" << endl;
//释放
delete l;
return 0;
}
准备存放的数据
存放完成