单链表的类的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 ...
随机推荐
- gitlab迁移库地址后远程的切换
本地需要把origin删除,然后再添加新的origin git remote rm origingit remote add origin [url] git push --set-upstream ...
- js正则匹配浮点数或整数
var pos='point(12.4 -45.423453)';var re = /([+]\d+[.]\d+|[-]\d+[.]\d+|\d+[.]\d+|[+]\d+|[-]\d+|\d+)/i ...
- CodeForces - 699B One Bomb
题目地址:http://codeforces.com/contest/699/problem/B 题目大意: 一个矩阵,内容由‘.’和‘*’组成(‘.’ 空,‘*’ 代表墙),墙分布在不同位置,现找出 ...
- Order Independent Transparency
http://on-demand.gputechconf.com/gtc/2014/presentations/S4385-order-independent-transparency-opengl. ...
- 最好用的placeholder插件,jQuery插件EnPlaceholder
EnPlaceholder插件支持密码框哦!实际对比同类的placeholder插件在ie等浏览器下效果做好! 插件效果预览:http://www.wufangbo.com/demo/jquery/3 ...
- 找到一款不错的网站压力测试工具webbench
webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装: 引用 wget htt ...
- css 父层 透明 子层不透明Alpha
html代码 <div class="user2-register-bg"> <div class="user2-register-con"& ...
- Swift学习二
// 定义枚举方式一 enum Season { // 每个case定义一个实例 case Spring case Summer case Fall case Winter } // 定义枚举方式二 ...
- kali 2.0源更新
摘自网址: 修改更新源sources.list,提高软件下载安装速度(提供Kali 2.0 更新源) - 月黑风寒 - 博客园http://www.cnblogs.com/webyihui/p/485 ...
- RPC-远程过程调用协议
远程过程调用协议 同义词 RPC一般指远程过程调用协议 RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要 ...