链表类的声明及定义

这个代码将链表类的声明、定义及测试写在一起了。可供初学者更好的学习链表。

#include "stdafx.h"
#include 
using namespace std;

class LinkList {
	private:
		struct node {   //链表节点定义
			int data;   //链表数据类型
			node *next;
		}*p;            //表头指针定义

	public:

		LinkList(void);
		~LinkList(void);

		//返回表头指针
		node * getHeadPoint();

		//逐个添加链表元素,尾部添加
		void append( int element );

		//从首部添加链表元素
		void addasFirst( int element );

		//从指定位置将元素生成结点添加链表,如 从链表第 location == 2个元素后,添加 element == 23
		void addAfter( int element, int location);

		//从指定位置将链表b插入
		void addAfter( node * hp_listB,  int location);

		//删除指定链表元素值大小的所有结点
		void remove( int element );

		//打印所有链表元素值
		void printAll();

		//计算链表长度
		int  size();

		//复制将链表所有结点至c
		void clone( node * hp_listC);

		//返回第一个元素
		int firstdata()
		{
			node *s=getHeadPoint();
			if(p==NULL)
				cout<<"the Link is NULL"<data;
		}

		//使头指针不为空
		void first_new()
		{
			if(p==NULL)
			{
				p=new node;
				p->next=NULL;
			}
		}


};


//****************************************************************************************************
//函   数  名: LinkList
//输 入 参 数: 无
//返   回  值: 无
//功 能 概 述: 表头指针置空
//备       注: 无参数构造函数
//****************************************************************************************************
LinkList::LinkList(void) {
	p = NULL;//表头指针置空
}


//****************************************************************************************************
//函   数  名: ~LinkList
//输 入 参 数: 无
//返   回  值: 无
//功 能 概 述: 逐个删除链表节点,最后将表头指针置空
//备       注: 无参数析构函数
//****************************************************************************************************
LinkList::~LinkList(void) {
	node *q;//用于遍历的游标指针

	//链表为空
	if( p == NULL )
		return;

	//链表不为空
	while( p != NULL ) {
		q = p->next;
		delete p;
		p = q;
	}
}


//****************************************************************************************************
//函   数  名: getHeadPoint
//输 入 参 数:  无
//返   回  值:  链表首部指针
//功 能 概 述:  获得当前链表的首部指针
//备       注:  无
//****************************************************************************************************
LinkList::node* LinkList::getHeadPoint() {
	return p;
}

//****************************************************************************************************
//函   数  名: append
//输 入 参 数: element    待添加链表结点元素值
//返   回  值:  无
//功 能 概 述:  尾部逐个添加链表结点,表头指针指向第一个结点
//备       注:  无
//****************************************************************************************************
void LinkList::append( int element) {
	node *q=p,*s;  //指针q指向p所指的位置,定义一个指针s
	s=new node;    //让指针s指向一个节点类
	if(p == NULL) {    //
		s->data=element;
		s->next=q;
		p=s;
		cout<<"link为空,添加的为第一个节点:"<next != NULL) {
			q = q->next;
		}
		s->data=element;
		q->next = s;
		s->next = NULL;
		cout<<"append非第一个节点:"<data=element;
	s->next =q;
	p=s;
	cout<<"addatfirst:"<next;
			i++;
		}
		if(idata =element;
			s->next = q->next;
			q->next = s;
			cout<<"addafter :"<next;
			i++;
		}
		if(inext!=NULL)
				s=s->next;
			s->next = q->next;
			q->next = hp_listB;
			//cout<<"addafter :"<<<data == element ) {
			flags++;
		}
		q = q->next;
	}
	if(flags==0)cout<<"Element "<next!=NULL) {
		s= q->next;
		if(s->data == element) {
			q->next = s->next;
		}
		q = q->next;
	}
}



//****************************************************************************************************
//函   数  名: printAll
//输 入 参 数:  无
//返   回  值:  无
//功 能 概 述: 将链表各结点元素值逐个打印出来
//备       注: 无
//****************************************************************************************************
void LinkList::printAll() {
	node * q =p;
	cout<<"print all of the link:";
	while (q != NULL) {
		cout<data<<" ";
		q = q->next;
	}
	cout<next;
	}
	return i;
}

//****************************************************************************************************
//函   数  名: clone
//输 入 参 数:  hp_listC
//返   回  值:  无
//功 能 概 述:  将当前链表复制给链表C,C的首部指针为hp_listC
//备       注: 无
//***************************************************************************************************
void LinkList::clone( LinkList::node *hp_listC ) {
	cout<<"clone"<data;
		node *s;  //指针q指向hp_lisyC所指的位置,定义一个结点指针s
		s=new node;    //让指针s指向一个节点类
		if(m!=NULL)
		{
			m->data=element;
			m=m->next;
		}
		else {
			while(q->next!= NULL) {
				q = q->next;
			}
			s->data=element;
			q->next = s;
			s->next = NULL;
			//cout<<"append非第一个节点:"<next;
	}
}

int main() {
	LinkList ListTest1;
	cout<<"Size of LinkList is: "<


你可能感兴趣的:(链表,C++)