简单的链表与自动清理内存

来源:互联网 发布:新东方托福知乎 编辑:程序博客网 时间:2024/05/23 13:53
#define _CRT_SECURE_NO_WARNINGS#include <iostream>//链表的打印using namespace std;typedef int DATA;struct Snode {DATA data;Snode* pNext;};//g代表:global//m代表:memberclass 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;}