单链表的面向对象实现

1.利用非面向对象定义节点Node

下面是头文件LinkList.h

 

#ifndef LinkList_H
#define LinkList_H

template<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_H

template <class T>
class LinkList;       //为是Node类的友员类而声明

template <class T>
class Node
{
   public:         
	  friend class LinkList<T>;   //将LinkList类设为友元类
   private:		    
	  T data;
      Node<T> *next;  
};

#endif

 这样就完成了彻底的对象会编程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值