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; }
运行结果:
相关文章推荐
- 数据结构实验-用C++实现带头结点的循环链表
- 带头结点的链表头插法C++实现
- C++实现带头结点单链表
- 带头结点的链表尾插法C++实现
- 带头结点单链表的各种各种运算(C++模板类实现)
- C++模板实现双向循环链表(有带头结点)
- 经典算法与数据结构的c++实现——带头结点的单链表
- 用C++实现数据结构二 带头结点的单链表
- 数据结构 带头结点的单链表 操作大全 最全的链表操作(c++实现)
- 数据结构(5)线性表之链表C++实现带头结点的单链表合并
- 不带头结点的链表头插法C++实现
- C++不带头结点的单循环链表解决约瑟夫环问题
- 自定义带头结点的单链表类(C++)----------测试(二)
- 试编写在无头结点的单链表上实现线性表的插入操作的算法,并和带头结点的单链表上的插入操作的算法进行比较
- 查找链表中倒数第k个结点 C++实现
- 数据结构模版----单链表SimpleLinkList[不带头结点](C语言实现)
- c语言实现--不带头结点的单链表操作
- C语言实现单链表-不带头结点
- 剑指offer第三十三题【两个链表的第一个公共结点】c++实现
- 《剑指offer》面试题57 删除链表中重复的结点 C++ 实现 以及 错误总结 (指针问题)!!