#define _CRT_SECURE_NO_WARNINGS
#include <iostream>//链表的打印
using namespace std;
typedef int DATA;
struct Snode
{
DATA data;
Snode* pNext;
};
//g代表:global
//m代表:member
class CList //链表
{
public:
CList()
{
m_pHead = NULL;
}
~CList() //析构函数是程序执行完毕后自动调用的,因此可以使用析构函数清理
{
RemoveAll();
}
Snode* m_pHead;
char m_name[20];
void SetName(const char* p)
{
strcpy(m_name, p);
}
void AddHead(DATA data)
{
Snode* p = new Snode;
p->data = data;
p->pNext = m_pHead;
m_pHead = p;
}
void AddTail(DATA data)
{
Snode* pNew = new Snode;
pNew->data = data;
pNew->pNext = NULL;
if (!m_pHead)
{
m_pHead = pNew;
return;
}
Snode* p = m_pHead;
while (p->pNext != NULL)
p = p->pNext;
p->pNext = pNew;
}
void Print()
{
cout << m_name << endl;
Snode* p = m_pHead;
while (p)
{
cout << p->data << endl;
p = p->pNext;
}
}
int GetCount()
{
Snode* p = m_pHead;
int i = 0;
while (p)
{
++i;
p = p->pNext;
}
return i;
}
void RemoveAll()//清理堆空间
{
Snode* p = m_pHead,*p1;
while (p)
{
p1 = p;
p = p->pNext;
delete p1;
}
}
};
int main()
{
int i(10);
int *p = new int(10);
CList list = { NULL }, list2 = {NULL};//初始化为空
list.SetName("List1: ");
list.AddHead(1);
list.AddHead(2);
list.AddHead(3);
list.AddTail(21);
list.AddTail(22);
list.AddTail(23);
list2.SetName("List2: ");
list2.AddHead(10);
list2.AddHead(11);
list2.AddHead(12);
list2.AddTail(51);
list2.AddTail(52);
list2.AddTail(53);
list.Print();
cout <<list.GetCount() << endl;
list2.Print();
cout << list2.GetCount() << endl;
list.RemoveAll();
list2.RemoveAll();
cin.get();
return 0;
}
简单的链表与自动清理内存
最新推荐文章于 2024-02-05 09:42:56 发布