链表
程序员文章站
2022-03-11 21:42:25
...
#include <iostream>
struct STU
{
char name[32];
int id;
};
#define DATA STU*
struct NODE
{
DATA data;
NODE* next;
};
class LinkList
{
public:
NODE* head;//表头
int len;//长度
void Create()
{
head = (NODE*)malloc(sizeof(NODE));
head->next = 0;
len = 0;
}
bool Insert(int pos, DATA data)
{
if (pos < 0 || pos > len)
return false;
NODE* n = (NODE*)malloc(sizeof(NODE));
n->data = data;
NODE* p = head;
for (int i = 0;i < pos; ++i)
p = p->next;
n->next = p->next;
p->next = n;
len++;
return true;
}
bool Erase(int pos)
{
if (pos < 0 || pos > len-1)
return false;
NODE* p = head;
for (int i = 0;i < pos; ++i)
p = p->next;
//p p->next p->next->next
NODE* nn = p->next->next;
free(p->next);
p->next = nn;
len--;
return true;
}
int Len()
{
return len;
}
DATA* Get(int pos)
{
if (pos < 0 || pos > len-1)
return 0;
NODE* p = head->next;
for (int i = 0;i < pos; ++i)
p = p->next;
return &p->data;
}
void Clear()
{
NODE* p = head->next;
while (p)
{
NODE* n = p->next;
free(p);
p = n;
}
head->next = 0;
len = 0;
}
void Destroy()
{
Clear();
free(head);
}
};
void main()
{
LinkList s;
s.Create();
STU* stu = (STU*)malloc(sizeof(STU));
strcpy(stu->name, "abc");
stu->id = 1;
s.Insert(0, stu);
stu = (STU*)malloc(sizeof(STU));
strcpy(stu->name, "DEF");
stu->id = 2;
s.Insert(1, stu);
for (int i = 0;i < s.Len(); ++i)
{
//数据如果是STU 返回的是STU* q; *q
//数据如果是STU* 返回的是STU** q; *q
STU** q = s.Get(i);
std::cout<< (*q)->name <<", " <<(*q)->id <<"\n";
}
//因为存的数据是开了堆的,所以在表销毁之前,应该
//把数据开的堆内存释放
for (int i = 0;i < s.Len(); ++i)
{
STU* q = *s.Get(i);
free(q);
}
s.Destroy();//销毁
}
上一篇: mybatis的多条件查询
下一篇: Arrays
推荐阅读