#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++实现的更多相关文章

  1. 数据结构—单链表(类C语言描写叙述)

    单链表 1.链接存储方法 链接方式存储的线性表简称为链表(Linked List). 链表的详细存储表示为: ① 用一组随意的存储单元来存放线性表的结点(这组存储单元既能够是连续的.也能够是不连续的) ...

  2. C++ 单链表模板类实现

    单链表的C语言描述 基本运算的算法——置空表.求表的长度.取结点.定位运算.插入运算.删除运算.建立不带头结点的单链表(头插入法建表).建立带头结点的单链表(尾插入法建表),输出带头结点的单链表 #i ...

  3. 单链表sLinkList类,模板类

    sLinkList模板类,单链表代码 /* 该文件按习惯可以分成.h文件和实现的.cpp文件 */ template <class elemType> class sLinkList { ...

  4. 数据结构:单链表结构字符串(python版)添加了三个新功能

    #!/urs/bin/env python # -*- coding:utf-8 -*- #异常类 class stringTypeError(TypeError): pass #节点类 class ...

  5. 数据结构:单链表结构字符串(python版)改进

    此篇文章的replace实现了字符串类的多次匹配,但依然有些不足. 因为python字符串对象为不变对象,所以replace方法并不修改原先的字符串,而是返回修改后的字符串. 而此字符串对象时用单链表 ...

  6. 数据结构:单链表结构字符串(python版)

    #!/urs/bin/env python # -*- coding:utf-8 -*- #异常类 class stringTypeError(TypeError): pass #节点类 class ...

  7. C#单链表

    顺序表是用地址连续的存储单元顺序存储线性表中的各个数据元素, 逻辑上相邻的数据元素在物理位置上也相邻.因此,在顺序表中查找任何一个位置上的数据元素非常方便, 这是顺序存储的优点. 但是, 在对顺序表进 ...

  8. C++单链表的创建与操作

    链表是一种动态数据结构,他的特点是用一组任意的存储单元(可以是连续的,也可以是不连续的)存放数据元素.链表中每一个元素成为“结点”,每一个结点都是由数据域和指针域组成的,每个结点中的指针域指向下一个结 ...

  9. java实现单链表常见操作

    一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashM ...

随机推荐

  1. 关于Linux的内存(free -m)

    查看Linux服务器下的内存使用情况,可以使用命令free -m.注意此命令只在Linux下有效,在FreeBSD中没有此命令.命令如下所示: used:已经使用的内存数 free:空闲的内存数 sh ...

  2. C++strng流(入门级)

    /************************************************************************* * * FILENAME: stringTest. ...

  3. 解惑好文:移动端H5页面高清多屏适配方案 (转)

    转自:http://mobile.51cto.com/web-484304.htm https://github.com/amfe/lib-flexible/blob/master/src/makeg ...

  4. aop实现日志(转)

    文章来至于http://www.thinksaas.cn/group/topic/341436/ 第一:>>在spring的配置文件里增加以下配置 <!-- 支持 @AspectJ ...

  5. angularjs DOM操作之jqLite篇

    angular.element(el).find("input").attr({value:1}); * ## Angular's jqLite * jqLite provides ...

  6. rehat 出现GDB debuginfo-install 问题处理

    本人使用rhel 6    GDB 调试代码时,出现以下错误: Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.166 ...

  7. 弹出框二 之 bootbox.js

    1.可以通过Nuget下载 2.引入 jquery bootstrap bootbox.js 3.使用 $(function () { //bootbox.alert("确认删除" ...

  8. CF467 AB 水题

    Codeforces Round #267 (Div. 2) (C和D的题解单独写:CF467C George and Job (DP) CF467D Fedor and Essay 建图DFS) C ...

  9. hdu4952 Number Transformation (找规律)

    2014多校 第八题 1008 2014 Multi-University Training Contest 8 4952 Number Transformation Number Transform ...

  10. 【AngularJS】—— 13 服务Service

    在AngularJS中有很多的服务,常用的比如$http,$location等等. 本篇文章会介绍一下的内容: 1 $http这种Angular提供的服务的使用 2 如何自定义服务,并总结服务需要注意 ...