单链表的类的c++实现
#include<iostream>
using namespace std;
template <class T>
struct linkNode{
T data;
linkNode<T> *link;
linkNode(linkNode<T> *pr=NULL){link=pr;}
linkNode(const T& item,linkNode<T> *pr=NULL){
data=item;
link=pr;
}
};
template<class T>
class list
{
protected:
linkNode<T> *first;
public:
list(){first = new linkNode<T>;}
list(const T& x){first = new linkNode<T>(x);}
list(list<T>& L);
~list(){makeEmpty();}
void makeEmpty();
int Length()const;
linkNode<T> *getHead()const {return first;}
linkNode<T> *search(T x);
linkNode<T> *Locate(int i);
bool getData(int i,T& x)const;
void setData(int i,T& x);
bool Insert(int i,T& x);
bool Remove(int i,T& x);
bool IsEmpty()const
{
if(first->link==NULL)
return true;
else
return false;
}
bool IsFull()const {return false;}
void Sort();
void input();
void output();
list<T>& operator=(list<T>& L);
};
template<class T>
list<T>::list(list<T>& L)
{
T value;
linkNode<T> *srcptr =L.getHead();
linkNode<T> *desptr =first =new linkNode<T>;
while(srcptr->link!=NULL)
{
value=srcptr->link->data;
desptr->link=new linkNode<T>(value);
desptr=desptr->link;
srcptr=srcptr->link;
}
desptr->link=NULL;
}
template<class T>
void list<T>::makeEmpty()
{
linkNode<T> *q;
while(first->link!=NULL)
{
q=first->link;
first->link=q->link;
delete q;
}
}
template<class T>
int list<T>::Length()const
{
linkNode<T> *p=first->link;
int count=0;
while(p!=NULL)
{
p=p->link;
count++;
}
return count;
}
template<class T>
linkNode<T> *list<T>::search(T x)
{
linkNode<T> *current =first->link;
while(current!=NULL)
{
if(current->data==x)
break;
else
current=current->link;
}
return current;
}
template<class T>
linkNode<T> *list<T>::Locate(int i)
{
if(i<0)
return NULL;
linkNode<T> *current=first;
int k=0;
while(current!=NULL&&k<i)
{
current=current->link;
k++;
}
return current;
}
template<class T>
bool list<T>::getData(int i,T& x)const
{
if(i<=0)
return NULL;
linkNode<T> *current=Locate(i);
if(current==NULL)
return false;
else
{
x=current->data;
return true;
}
}
template<class T>
void list<T>::setData(int i,T& x)
{
if(i<=0)
return ;
linkNode<T> *current=Locate(i);
if(current==NULL)
return;
else
current->data=x;
}
template<class T>
bool list<T>::Insert(int i,T& x)
{
linkNode<T> *current=Locate(i);
if(current==NULL)
return false;
linkNode<T> *newNode =new linkNode<T>(x);
if(newNode==NULL)
{
cerr<<"内存分配错误"<<endl;
exit(1);
}
newNode->link=current->link;
current->link=newNode;
return true;
}
template<class T>
bool list<T>::Remove(int i,T& x)
{
linkNode<T> *current=Locate(i-1);
if(current==NULL||current->link==NULL)
return false;
linkNode<T> *del=current->link;
current->link=del->link;
x=del->data;
delete del;
return true;
}
template<class T>
void list<T>::Sort()
{
}
template<class T> //前插法
void list<T>::input()
{
linkNode<T> *newNode;
T val;
makeEmpty();
cin>>val;
while(val!=0)
{
newNode = new linkNode<T>(val);
if(newNode ==NULL){cerr<<"存储分配错误!"<<endl;exit(1);}
newNode->link=first->link;
first->link=newNode;
cin>>val;
}
/*linkNode<T> *newNode ,*last;//后插法
T val;
makeEmpty();
cin>>val;
last=first;
while(val!=a)
{
newNode=new linkNode<T>(val);
if(newNode==NULL)
{
cerr<<"存储分配失败"<<endl;
}
last->link=newNode;
last=newNode;
cin>>val;
}
last->link=NULL;
*/
}
template<class T>
void list<T>::output()
{
linkNode<T> *current =first->link;
while(current!=NULL)
{
cout<<current->data<<" ";
current=current->link;
}
}
template<class T>
list<T>& list<T>::operator=(list<T>& L)
{
T value;
linkNode<T> *srcptr =L.getHead();
linkNode<T> *desptr =first =new linkNode<T>;
while(srcptr->link!=NULL)
{
value=srcptr->link->data;
desptr->link=new linkNode<T>(value);
desptr=desptr->link;
srcptr=srcptr->link;
}
desptr->link=NULL;
return *this;
}
int main()
{
list<int> h;
h.input();
h.output();
return 0;
}
单链表的类的c++实现的更多相关文章
- 数据结构—单链表(类C语言描写叙述)
单链表 1.链接存储方法 链接方式存储的线性表简称为链表(Linked List). 链表的详细存储表示为: ① 用一组随意的存储单元来存放线性表的结点(这组存储单元既能够是连续的.也能够是不连续的) ...
- C++ 单链表模板类实现
单链表的C语言描述 基本运算的算法——置空表.求表的长度.取结点.定位运算.插入运算.删除运算.建立不带头结点的单链表(头插入法建表).建立带头结点的单链表(尾插入法建表),输出带头结点的单链表 #i ...
- 单链表sLinkList类,模板类
sLinkList模板类,单链表代码 /* 该文件按习惯可以分成.h文件和实现的.cpp文件 */ template <class elemType> class sLinkList { ...
- 数据结构:单链表结构字符串(python版)添加了三个新功能
#!/urs/bin/env python # -*- coding:utf-8 -*- #异常类 class stringTypeError(TypeError): pass #节点类 class ...
- 数据结构:单链表结构字符串(python版)改进
此篇文章的replace实现了字符串类的多次匹配,但依然有些不足. 因为python字符串对象为不变对象,所以replace方法并不修改原先的字符串,而是返回修改后的字符串. 而此字符串对象时用单链表 ...
- 数据结构:单链表结构字符串(python版)
#!/urs/bin/env python # -*- coding:utf-8 -*- #异常类 class stringTypeError(TypeError): pass #节点类 class ...
- C#单链表
顺序表是用地址连续的存储单元顺序存储线性表中的各个数据元素, 逻辑上相邻的数据元素在物理位置上也相邻.因此,在顺序表中查找任何一个位置上的数据元素非常方便, 这是顺序存储的优点. 但是, 在对顺序表进 ...
- C++单链表的创建与操作
链表是一种动态数据结构,他的特点是用一组任意的存储单元(可以是连续的,也可以是不连续的)存放数据元素.链表中每一个元素成为“结点”,每一个结点都是由数据域和指针域组成的,每个结点中的指针域指向下一个结 ...
- java实现单链表常见操作
一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashM ...
随机推荐
- javascript字符串截取的substring、substr和slice
本文详细的介绍了javascript中substring().substr()和slice()三个JS字符串截取的方法,substring()方法用于提取字符串中介于两个指定下标之间的字符.subst ...
- HDU 1010 Tempter of the Bone(DFS+奇偶剪枝)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010 题目大意: 输入 n m t,生成 n*m 矩阵,矩阵元素由 ‘.’ 'S' 'D' 'X' 四 ...
- lightbox图片展示效果
1.lightbox 头部导入: <script type="text/javascript" src="../Public/Js/prototype.js&quo ...
- VIM自动补全插件 - YouCompleteMe--"大神级vim补全插件"
VIM自动补全插件 - YouCompleteMe 序言 vim 之所以被称为编辑器之神多半归功于其丰富的可DIY的灵活插件功能,( 例如vim下的这款神级般的代码补全插件YouCompleteMe) ...
- 部署lamp服务器
系统:CentOS 6.5 64位 1.卸载旧版本软件 rpm -qa | grep mysql #查询是否已经安装MySQL,如有执行下面的操作将其全部删除 rpm -e mysql --nodep ...
- PHP file_get_contents设置超时处理方法
从PHP5开始,file_get_content已经支持context了(手册上写着:5.0.0 Added the context support. ),也就是说,从5.0开始,file_get_c ...
- 在Razor中如何引入命名空间?("import namespace in razor view") 【转】
原文链接 找了半天,原来如此: 在aspx中: <%@ Import Namespace = "Martian.Areas.SFC.Models" %><%@ I ...
- 微信C# SDK
微信C# SDK # 模块功能 DLL 1 基础库 Senparc.Weixin.dll 2 微信公众号 / 微信支付 / JSSDK / 摇周边 / 等等 Senparc.Weixin.MP.dll ...
- LVS简介
LVS 编辑 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一 ...
- js日期格式化函数
/** * @author ocq * * 对Date的扩展,将 Date 转化为指定格式的String * 月(M).日(d).12小时(h).24小时(H).分(m).秒(s).周(E).季度(q ...