企业链表小框架搭建

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);
}

渺小!!!!渺小!!!!

渺小!!!!渺小!!!!

渺小!!!!渺小!!!!

渺小!!!!渺小!!!!

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值