数据结构之单项链表

//***************************
//节点类的创建
//***************************
#ifndef NODE_H_
#define NODE_H_

#include <iostream>
#include <cstdlib>

template<typename T> class LinkList;
template<typename T>
class Node
{
public:
	friend class LinkList<T>;
public:
	T value;
	Node<T>* next;
public:
	//Node(NULL):next(NULL){NULL;};
	Node(){next=NULL;}
	Node(const T& T1){value=T1,next=NULL;};
	T& GetValue(void){return value;}
	Node<T>* GetNext(){return next;}

};
#endif
//************************
//链表类的创建
//***********************
#include <iostream>
#include "Node.h"
using namespace std;

template <typename T>
class LinkList
{
private:
	Node<T>* p_Head;
public:
	LinkList(void);
	~LinkList(void);
	void clear(void);
	T& visit(size_t pos);
	void Insert(const size_t pos,const T& value);
	void add(const T& value);
	size_t getLengh(void) const;
	void remove(const size_t pos);
	size_t search(const T& value0) const;


};
//
//  构造函数--新建一个节点
//
template <typename T>
LinkList<T>::LinkList(void)
{
	p_Head=new Node<T>();
}
//
//  析构函数
//
template <typename T>
LinkList<T>::~LinkList(void)
{
	clear();
	delete p_Head;
}

//
//  链表清零
//
template <typename T>
void LinkList<T>::clear()
{
	Node<T>* saveNode=NULL;
	while(NULL!=p_Head->next)
	{
 
		saveNode=p_Head;
		//cout<<saveNode->value<<endl;
		p_Head=p_Head->next;
		delete[] saveNode;
		
	}

	    
}

//
//  访问某一节点的值
//
template <typename T>
T&  LinkList<T>::visit(size_t pos)
{
	Node<T>* prev=p_Head;
	for(int i=0;i<pos+1&&prev!=NULL;i++)
	{
		prev=prev->next;
	}
	return prev->value;
}

//
//  在指定位置插入节点
//
template <typename T>
void LinkList<T>::Insert(const size_t pos, const T &value)
{
	Node<T>* prev=p_Head;
	Node<T>* newlist=new Node<T>(value);
	cout<<newlist->value<<endl;
	for(int j=0;j<pos&&prev->next!=NULL;j++)
	{
		
		prev=prev->next;
		
	}
	
	newlist->next=prev->next;
	prev->next=newlist;
    

}
//
//  在链表头结点后插入值
//
template <typename T>
void LinkList<T>::add(const T &value)
{
	
	Node<T>* prev=p_Head;
	
	while(prev->next!=NULL)               //依次插入数据
	{
		prev=prev->next;
	}
	
	Node<T>* newlist=new Node<T>(value);	
	newlist->next=prev->next;
	prev->next=newlist;


}
//
//  获得链表长度
//
template <typename T>
size_t LinkList<T>::getLengh() const
{
	int i=0;
	Node<T>* prev=p_Head;
	while(prev->next!=NULL)
	{
		prev=prev->next;
		i++;
	}
	return i;

}

//
//  删除某节点
//
template <typename T>
void LinkList<T>::remove(const size_t pos)
{
	Node<T>* prev=p_Head;
	for(int i=0;i<pos&&NULL!=prev->next;i++)
	{
		prev=prev->next;
	}
	
	Node<T>* savelist=prev->next;
	cout<<"nihao";
	prev->next=savelist->next;
	delete savelist;

}
//
//  删除某节点
//
template <typename T>
size_t LinkList<T>::search(const T &value0) const
{
	Node<T>* prev=p_Head;
	int i=0;
	while(prev->value!=value0)
	{
		prev=prev->next;
		i++;
	}
	return i;

}
//************************
//测试函数
//************************
#include "LinkList.h"
#include <iostream>
using namespace std;

void main()
{
	//cout<<"nihao"<<endl;
	int num=10;
LinkList<int> link;
link.add(1);
link.add(2);
link.add(3);
link.add(5);
link.add(100);
//for(int i=1;i<num;i++)
//{
//	link.Insert(i,i+100);
//}
link.remove(2);
cout<<link.getLengh()<<endl;
cout<<link.visit(1)<<endl;
cout<<link.search(100)<<endl;
link.clear();

cout<<link.getLengh()<<endl;


}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值