链表模型
只将前四个字节用来作为指针域,并且只对指针域进行操作即可,并不会对数据进行操作。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200929153757988.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MTY0MzMx,size_16,color_FFFFFF,t_70#pic_center)
链表代码实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct LinkNode {
struct LinkNode* next;
};
struct LinkList {
int m_size;
struct LinkNode pHeader;
};
typedef void* LList;
LList init_LinkList() {
struct LinkList* myList = malloc(sizeof(struct LinkList));
if (myList == NULL)
return NULL;
myList->m_size = 0;
myList->pHeader.next = NULL;
return myList;
}
void insert_LinkList(LList list, int pos, void* data) {
if (list == NULL || data == NULL)
return;
struct LinkList* myList = list;
if (pos < 0 || pos > myList->m_size-1)
{
pos = myList->m_size;
}
struct LinkNode* myNode = data;
struct LinkNode* pCurrent = &myList->pHeader;
for (int i = 0; i < pos; i++) {
pCurrent = pCurrent->next;
}
myNode->next = pCurrent->next;
pCurrent->next = myNode;
myList->m_size++;
}
void for_each_LinkList(LList list, void(*myPrint)(void* data)) {
if (list == NULL)
return;
struct LinkList* myList = list;
struct LinkNode* pCurrent = myList->pHeader.next;
for (int i = 0; i < myList->m_size; i++) {
myPrint(pCurrent);
pCurrent = pCurrent->next;
}
}
void delete_by_pos(LList list, int pos) {
if (list == NULL)
return;
struct LinkList* myList = list;
if (pos < 0 || pos >= myList->m_size)
return;
struct LinkNode* myNode = &myList->pHeader;
for (int i = 0; i < pos; i++)
{
myNode = myNode->next;
}
struct LinkNode* delNode = myNode->next;
myNode->next = delNode->next;
myList->m_size--;
}
void destroy_LinkList(LList list) {
if (list == NULL)
return;
struct LinkList* myList = list;
myList->m_size = 0;
myList->pHeader.next = NULL;
free(list);
list = NULL;
}
typedef struct Person {
void* node;
char name[64];
int age;
}Person;
void myPrint(void* data) {
Person* p = data;
printf("姓名:%s, 年龄:%d\n", p->name, p->age);
}
void test01() {
Person p1 = { NULL, "bobo",23 };
Person p2 = { NULL, "hoho",24 };
Person p3 = { NULL, "toto",25 };
Person p4 = { NULL, "yoyo",26 };
struct LinkList* myList = init_LinkList();
insert_LinkList(myList, 0, &p1);
insert_LinkList(myList, 1, &p2);
insert_LinkList(myList, 0, &p3);
insert_LinkList(myList, 2, &p4);
for_each_LinkList(myList, myPrint);
delete_by_pos(myList, 3);
printf("++++++++++++++++++++++++++\n");
for_each_LinkList(myList, myPrint);
destroy_LinkList(myList);
myList = NULL;
}
int main()
{
test01();
system("pause");
return EXIT_SUCCESS;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)