链表

#include<iostream>
using namespace std;


template <class T>
class LinkList{
private:
	typedef struct Linknode{
		T t;
		Linknode* next;
	}Linknode;//节点 
	Linknode* head;// 头指针 
	Linknode H;//头结点 
	int sum; //节点的个数(不包括头结点) 
public:	
	//初始化
	LinkList();
	//创造节点
	Linknode* c_node(T tmp); 
	//头插法
	bool add(T* tmp);
	bool add(T  tmp);

	T findK(int k); 	//查找下标的值 

	int findNum(T tmp);	//查找值的下标
	//中间插入 
	bool insert(T* tmp,int k); 
	//删除
	bool deleteK(int k); 
	 
	~LinkList();	
}; 
template <class T>//初始化
LinkList<T>::LinkList(){
	H.t = NULL;
	H.next = NULL;
	head = &H;
	sum = 0; 
	cout<<"已初始化节点"<<endl; 
}
template <class T>	//创造节点
struct LinkList<T>::Linknode* LinkList<T>::c_node(T tmp){
	Linknode* K = new Linknode;
	K->t = tmp;
	K->next = NULL;
	return K;
}
template <class T>//头插法
bool LinkList<T>::add(T* tmp){
	Linknode* pnode = c_node(*tmp);
	cout <<"将数值转化为节点 ***"; 
	pnode->next = head->next;
	head->next = pnode;
	sum++;
	cout <<"头插入一个节点"<<endl; 
	return true;
}
template <class T>//头插法
bool LinkList<T>::add(T tmp){
	Linknode* pnode = c_node(tmp);
	cout <<"将数值"<<tmp<<"转化为节点 ***"; 
	pnode->next = head->next;
	head->next = pnode;
	sum++;
	cout <<"头插入一个节点"<<endl; 
	return true;
}
template <class T>	//查找 第K个节点的值
T LinkList<T>::findK(int k){
	Linknode* pnode = head;
	if(sum == 0)cout <<"当前链表为空链表"<<endl;
	else if(k<1 || k>sum)cout <<"越界"<<endl;
	else{
		int i=0;
		
		while(i!=k){
			pnode = pnode->next;
			i++;
		}
		cout <<"找到目标节点"<<endl; 
	} 
	return pnode->t;
}
template <class T> //查找值是第几个节点 
int LinkList<T>::findNum(T tmp){
	int k = 0;
	if(sum == 0)cout <<"当前链表为空链表"<<endl;
	else{
		Linknode* pnode = head;
		while(k<=sum){
			pnode = pnode->next;
			k++;
		}
	}
	return k;
}
template <class T>//中间插入
bool LinkList<T>::insert(T* tmp, int k){
	if(k<1 || k>sum){
		cout << "越界"<<endl;
		return false;
	}else{
		
		Linknode* ptem = c_node(*tmp);
		Linknode* pnode = head;
		int i = 0;
		while(i!=k-1){
			pnode = pnode->next;
		}
		ptem->next = pnode->next;
		pnode->next = ptem;
		return true;
	}
}
template <class T>//删除
bool LinkList<T>::deleteK(int k){
	if(k<1 || k>sum){
		cout << "越界"<<endl;
		return false;
	}else{
		
		Linknode* ptem;
		Linknode* pnode = head;
		int i = 0;
		while(i!=k-1){
			pnode = pnode->next;
		}
		ptem-> next= pnode->next;
		pnode->next = ptem->next;
		delete ptem;
		return true;
	}
}
template <class T>//析构 
LinkList<T>::~LinkList(){
	if(sum!=0){
		while(sum>0){
			deleteK(1);
		}
	}
	
}

void text(){
	cout <<"你将创建一个数值链表\n数值类型可为 int long short double \n请输入你想创建的链表类型:"<<endl;
	
	
	
	
	
}

int main(){
	cout <<"1、创建新列表"<<endl; 
	LinkList<int> L;
	cout<<"2.1、通过值头插入添加元素"<<endl;
	L.add(111);
	cout << "查找 第K个节点的值  "<<L.findK(1)<<endl;
	cout<<"2.2、通过地址,指针头插入添加元素"<<endl;
	int q = 222;
	L.add(&q);
	cout << "查找 第K个节点的值  "<<L.findK(1)<<" "<<L.findK(2) <<endl;
	cout<<"3、在中间插入元素"<<endl;
	int w = 333;
	int* e = &w;
	cout<<"查找333是第几个元素   "<<L.findNum(333)<<endl; 
	cout<<"4、删除元素"<<endl; 
	cout << L.findK(1)<<endl;
	cout<<"显示现有元素  "<<L.findK(1)<<" "<<L.findK(2)<<endl; 
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值