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);
}
效果图: