ListNode.h文件:
#pragma once
#include<iostream>
typedef struct LISTNODE
{
struct LISTNODE*next;
}ListNode;
typedef struct LINKSTACK
{
ListNode *head;
int Size;
}LinkStack;
// 打印函数指针
typedef void(*PRINTLINKNODE)(void*);
typedef int(*COMPARENODE)(ListNode*, ListNode*);
//初始化链表
LinkStack *Init_ListNode();
//指定位置插入
void Insert_ListNode(LinkStack*linkList, int Pos, ListNode*data);
//删除指定位置的值
void Delete_LinkList(LinkStack*linkList, int Pos);
//获取链表长度
int Size_LinkList(LinkStack*linkList);
//查找
int Find_LinkList(LinkStack*linkList, ListNode *data, COMPARENODE compare);
//返回第一个节点
void* First_LinkList(LinkStack*linkList);
//打印链表
void Prinf_LinkList(LinkStack*linkList, PRINTLINKNODE print);
//释放链表内存
void FreeSpalce_LinkList(LinkStack*linkList);
ListNode.cpp文件:
#include"ListNode.h"
//初始化链表
LinkStack *Init_ListNode()
{
LinkStack *linkstack = (LinkStack*)malloc(sizeof(LinkStack));
linkstack->head = (ListNode*)malloc(sizeof(ListNode));
linkstack->Size = 0;
linkstack->head->next = NULL;
return linkstack;
};
//指定位置插入
void Insert_ListNode(LinkStack*linkList, int Pos, ListNode*data)
{
if (linkList==NULL)
{
return;
}
if (data==NULL)
{
return;
}
ListNode *Pcurrent = linkList->head;
for (int i = 0; i < Pos; i++)
{
Pcurrent = Pcurrent->next;
}
data->next = Pcurrent->next;
Pcurrent->next = data;
linkList->Size++;
};
//删除指定位置的值
void Delete_LinkList(LinkStack*linkList, int Pos)
{
if (linkList==NULL)
{
return;
}
if (Pos<0||Pos>=linkList->Size)
{
return;
}
ListNode*Pcuttent = linkList->head;
for (int i = 0; i < Pos; i++)
{
Pcuttent = Pcuttent->next;
}
/*ListNode*Del = Pcuttent->next;
Pcuttent->next = Del->next;
free(Del);没有拿到内存所有不用释放*/
Pcuttent->next = Pcuttent->next->next;//直接覆盖更改地址
linkList->Size--;
};
//获取链表长度
int Size_LinkList(LinkStack*linkList) {
if (linkList==NULL)
{
return -1;
}
return linkList->Size;
};
//查找
int Find_LinkList(LinkStack*linkList, ListNode *data, COMPARENODE compare) {
if (linkList == NULL)
{
return -1;
}
if (data == NULL)
{
return -1;
}
int Pos = -1;
int i=0;
ListNode*Pcurrent = linkList->head->next;
while (Pcurrent!=NULL)
{
if (compare(Pcurrent,data)==0)
{
Pos = i;
break;
}
i++;
Pcurrent = Pcurrent->next;
}
return Pos;
};
//返回第一个节点
void* First_LinkList(LinkStack*linkList) {
if (linkList == NULL)
{
return NULL;
}
return linkList->head->next;
};
//打印链表
void Prinf_LinkList(LinkStack*linkList, PRINTLINKNODE print) {
if (linkList == NULL)
{
return;
}
ListNode*Pcurrent = linkList->head;
while (Pcurrent!=NULL)
{
print(Pcurrent->next);
Pcurrent = Pcurrent->next;
}
};
//释放链表内存
void FreeSpalce_LinkList(LinkStack*linkList) {
if (linkList == NULL)
{
return;
}
linkList->Size = 0;
if (linkList->head!=NULL)
{
free(linkList->head);
}
free(linkList);
};
Main.cpp:
#include"ListNode.h"
using namespace std;
#include<string>
typedef struct PERSON
{
ListNode node;
char name[50];
int age;
}Person;
void MyPrinf(void*data)
{
if (data==NULL)
{
return;
}
Person *p = (Person*)data;
printf("Name:%s Age:%d\n", p->name, p->age);
}
int MyCompare(ListNode*node1,ListNode*node2){
Person*p1 = (Person*)node1;
Person*p2 = (Person*)node2;
if (strcmp(p1->name , p2->name)==0 && p1->age==p2->age)
{
return 0;
}
return -1;
}
void main()
{
LinkStack* linkstack = Init_ListNode();
Person p1 = {NULL ,"aaa",10 };
Person p2 = {NULL ,"bbb",20 };
Person p3 = {NULL ,"ccc",30 };
Person p4 = {NULL ,"ddd",40 };
Person p5 = {NULL ,"eee",50 };
Insert_ListNode(linkstack, 0,(ListNode*)&p1);
Insert_ListNode(linkstack, 0,(ListNode*)&p2);
Insert_ListNode(linkstack, 0,(ListNode*)&p3);
Insert_ListNode(linkstack, 0,(ListNode*)&p4);
Insert_ListNode(linkstack, 0,(ListNode*)&p5);
Prinf_LinkList(linkstack, MyPrinf);
int Size = Size_LinkList(linkstack);
cout << "Size:" << Size << endl;
cout << endl;
Delete_LinkList(linkstack, 3);
cout << "-----删除位置3后-----" << endl;
Prinf_LinkList(linkstack, MyPrinf);
Size = Size_LinkList(linkstack);
cout << "Size:" << Size << endl;
cout << endl;
cout << "-----返回第一个位置-----" << endl;
Person*first = (Person*)First_LinkList(linkstack);
printf("Name:%s Age:%d\n", first->name, first->age);
cout << endl;
int No = Find_LinkList(linkstack, (ListNode*)&p3, MyCompare);
cout <<"p3是第" << No << "个" << endl;
cout << endl;
//释放链表内存
FreeSpalce_LinkList(linkstack);
}
渺小!!!!渺小!!!!
渺小!!!!渺小!!!!
渺小!!!!渺小!!!!
渺小!!!!渺小!!!!