C++‘企业’链表

C++‘企业’链表

#include <iostream>
using namespace std;
class Linked
{
public:
	Linked* next;
};
typedef void(*Print)(Linked*);//打印方法函数类型
class LinkeStruct {
public:
	LinkeStruct();
	~LinkeStruct();
	void insert(int, Linked*);//在指定位置插入
	void remove(int);//删除指定位置的值
	int Size();//获取链表长度
	int find(Linked*);//查找元素位置
	Linked* front();//返回第一个节点
	void DeleteLinke();//释放链表内存
	void print(Print);//输出链表
private:
	Linked*head;
	int size;
};
class Teacher 
{
public:
	Linked*node;
	char name[64];
	int age;
};
LinkeStruct::LinkeStruct()
{
	head = new Linked;
	head->next = NULL;
	size = 0;
}

LinkeStruct::~LinkeStruct()
{
	if (head)
	{
		delete head;
		head = NULL;
		size = 0;
	}
}

void   LinkeStruct::insert(int pos, Linked*data)
{
	if (data==NULL)//判断数组是否越界
	{
		return;
	}
	
	Linked*p = head;

	if (pos < 0 || pos >= size)
	{
		pos = size;
	}
	for (; pos>0; --pos, p = p->next);
	data->next = p->next;
	p->next = data;
	
	++size;

};//在指定位置插入
void   LinkeStruct::remove(int pos) {
	Linked*p = head;

	int i = pos;
	for (; i > 0; --i, p = p->next);
	Linked*q = p->next;
	p->next = q->next;
	delete q;
	--size;

};//删除指定位置的值
int    LinkeStruct::Size() {
	return size;
};//获取链表长度
int   LinkeStruct::find(Linked*data) {
	Linked*p = head->next;
	int i = 0;
	while (p->next != data)
	{
		p = p->next;
		if (p == NULL)
		{
			return -1;
		}
		i++;
	}
	return i;
};//查找元素位置
Linked*  LinkeStruct::front() {

	return head->next;
};//返回第一个节点
void   LinkeStruct::DeleteLinke() {

	Linked*p = head;
	while (head->next)
	{
		head = head->next;
		delete p;
		p = head;
		--size;
	}
	delete head->next;

};//释放链表内存

void LinkeStruct::print(Print print) {
	Linked*p = head->next;
	while (p)
	{
		print(p);
		p = p->next;
	}

};//输出链表
void LinkePrint(Linked*node) {
	Teacher*teacher = (Teacher*)node;
	cout << "姓名:" << teacher->name << "年龄:" << teacher->age << endl;
}
void main() {
	LinkeStruct linke;
	Teacher s1 ;
	Teacher s2 ;
	Teacher s3 ;
	Teacher s4 ;

	strcpy_s(s1.name, strlen("张三") + 1, "张三");
	strcpy_s(s2.name, strlen("李四") + 1, "李四");
	strcpy_s(s3.name, strlen("王五") + 1, "王五");
	strcpy_s(s4.name, strlen("马六") + 1, "马六");
	s1.age=20;
	s2.age=21;
	s3.age=19;
	s4.age=16;

	linke.insert(0, (Linked*)&s1);
	linke.insert(0, (Linked*)&s2);
	linke.insert(1, (Linked*)&s3);
	linke.insert(0, (Linked*)&s4);
	linke.print(LinkePrint);
}

效果图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44567289/article/details/93909798