单链表的面向对象实现
1.利用非面向对象定义节点Node
下面是头文件LinkList.h
?
#ifndef LinkList_H#define LinkList_Htemplate<class T>struct Node{Node<T>* next;T data;};template<class T>class LinkList{public:LinkList();//建立只有头结点的空链表LinkList(T a[], int n); //建立有n个元素的单链表~LinkList();//析构函数int length();//求单链表的长度T get(int i);//取单链表中第i个结点的元素值int locate(T x);//求单链表中值为x的元素序号void insertData(int i, T x);//在单链表中第i个位置插入元素值为x的结点T deleteData(int i);//在单链表中删除第i个结点void printList(); //遍历单链表,按序号依次输出各元素Node<T>* getFirst();//获取头结点private:Node<T>* first;//单链表的头指针void release();//释放链表};#endif在这里定义头结点是利用了原来c语言的方式,定义的结构体,这是c++从c继承过来的,现在要改成c++面向对象的方法定义节点!
?对头文件的实现LinkList.cpp就不写了
?
2.对Node节点的面向对象实现
a.LinkList.h
?
//LinkList.h 声明类LinkList#ifndef LinkList_H#define LinkList_H#include "Node.h"template <class T>class LinkList{ public: LinkList( ); //建立只有头结点的空链表 LinkList(T a[], int n); //建立有n个元素的单链表 ~LinkList( ); //析构函数 int Length( ); //求单链表的长度 T Get(int i); //取单链表中第i个结点的元素值 int Locate(T x); //求单链表中值为x的元素序号 void Insert(int i, T x); //在单链表中第i个位置插入元素值为x的结点 T Delete(int i); //在单链表中删除第i个结点 void PrintList( ); //遍历单链表,按序号依次输出各元素 private: Node<T> *first; //单链表的头指针};#endif?b.然后在Node中将LinkList.h声明为友元类,这样可以访问Node中的私有成员
Node.h
?
//Node.h 声明类Node#ifndef Node_H#define Node_Htemplate <class T>class LinkList; //为是Node类的友员类而声明template <class T>class Node{ public: friend class LinkList<T>; //将LinkList类设为友元类 private: T data; Node<T> *next; };#endif?这样就完成了彻底的对象会编程