您的位置:首页 > 编程语言 > C语言/C++

C++实现带头结点的单链表(友元类)

2018-01-20 18:23 519 查看
代码实现 单链表的头插和尾插   

#include <iostream>
using namespace std;

class Node
{
public:
Node(int data, Node* next = NULL)//构造函数
{
mdata = data;
pnext = next;
}
//不用写析构函数 因为头结点是在栈上开辟的
//不需要手动去释放 所以不写析构函数
private:
int mdata;
Node* pnext;
/*
友元关系
破坏封装性
C++ 能不用友元 尽量不要用
*/
/*

List是Node的友元类
*/
friend class List;
};
class List
{
public:
/*
构造函数后加上一个冒号
初始化列表给编译给出了成员变量的初始化方式
Node phead(0)
*/
/*
初始化成员变量的顺序和初始化列表中的顺序是没有关系
和成员变量的声明顺序有关
*/
List():phead(0)
{
}
void InsertHead(int data)
{
Node* pNewNode = new Node(data);
pNewNode->pnext = phead.pnext;
phead.pnext = pNewNode;
}
void InsertTail(int data)
{
Node* pNewNode = new Node(data);
Node* pCur = &phead;
while (pCur->pnext != NULL)
{
pCur = pCur->pnext;
}
pCur->pnext = pNewNode;
}
/*
this  ==>  const List*const
*/
void Show()const
{
Node* pCur = phead.pnext;
Node* pNext = pCur;
while (pCur != NULL)
{
pNext = pCur->pnext;
cout << pCur->mdata << " ";
pCur = pNext;
}
cout << endl;
}
~List()
{
Node* pCur = phead.pnext;
Node* pNext = pCur;
while (pCur != NULL)
{
pNext = pCur->pnext;
delete pCur;
pCur = pNext;
}
phead.pnext = NULL;
}
private:
Node phead;//成员对象
};

int main()
{
List list1;
List list2;

for (int i = 0; i < 10; ++i)
{
list1.InsertHead(i + 1);
list2.InsertTail(i + 1);
}

cout << "list1:";
list1.Show();
cout << endl;

cout << "list2:";
list2.Show();

return 0;
}

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: