#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. sed,grep,awk命令常用法

    查看当天nginx访问日志中2016:03:25到2016:05点passport.mingxiao.com域名访问量最多的url,可以查看网站是否被刷. 法一: sed -n '/2016:03:2 ...

  2. HTML教程

    HTML文档可以包含的内容 通过不同的标签,HTML文档可以包含不同的内容,比如文本,链接,图片,列表,表格,表单,框架等. 文本 HTML对文本的支持是最丰富的,你可以设置不同级别的标题,分段和换行 ...

  3. 第二轮冲刺-Runner站立会议02

    今天做了什么:查看gridview与baseadapter适配器 遇到的困难:继续gridview与baseadapter适配器 明天准备做什么:没有弄懂gridview与baseadapter适配器 ...

  4. PHP内存溢出解决方案

    一.内存溢出解决方案 在做数据统计分析时,经常会遇到大数组,可能会发生内存溢出,这里分享一下我的解决方案.还是用例子来说明这个问题,如下: 假定日志中存放的记录数为500000条,那么解决方案如下: ...

  5. 入门:HTML表单与Java 后台交互(复选框提交)

    仅仅给出部分关键代码: HTML form code: <form action="JavaFormTest" method="post" name=&q ...

  6. dedecms标签的sql语句

    {dede:sql sql='Select content from dede_arctype where id=1' titlelen='40′} [field:content/] {/dede:s ...

  7. Redis学习——SDS字符串源码分析

    0. 前言 这里对Redis底层字符串的实现分析,但是看完其实现还没有完整的一个概念,即不太清楚作者为什么要这样子设计,只能窥知一点,需要看完redis如何使用再回头来体会,有不足之处还望告知. 涉及 ...

  8. createStatement()的用法

    createStatement()的用法 标签: 数据库concurrencyscrollsql 2012-02-24 19:58 2508人阅读 评论(0) 收藏 举报  分类: JavaEE服务器 ...

  9. testNg vs junit 4.X @Test

    http://www.ibm.com/developerworks/cn/java/j-cq08296/ 一个简单的测试用例 初看起来,JUnit 4 和 TestNG 中实现的测试非常相似.为了更好 ...

  10. mysql max_allowed_packet查询和修改

    http://www.2cto.com/database/201303/195830.html mysql根据配置文件会限制server接受的数据包大小. 有时候大的插入和更新会被max_allowe ...