链表模板和实现

主要思想来自于数据结构 实现基本上是靠思想加上自身摸索实现的,有不对的地方请多多指正!

#include <iostream>
using namespace std;
template <class T>
struct  linknode{T date;linknode<T>* next;linknode(linknode<T>*io=NULL){next=io;}linknode(T x,linknode<T>* io=NULL){date=x;next=io;}
};
template <class  T>
class list{private:linknode<T> *first;
public:list(linknode<T>*io=NULL){first=new linknode<T>(io);}list(int x,linknode<T> *io=NULL){first=new linknode<T> (x,io);}~list(){while(first->next!=NULL){first->next=first->next->next;delete first->next;}}linknode<T>* locate(int i);bool getdate(int i,T&x);void setdate(int i,T&x);linknode<T>* search(T x);int length();bool Isempty(){return first->next==NULL?1:0;}bool insert(int i ,T&x);bool remove(int i ,T&x);linknode<T>* gethead(){return first;}void input() {linknode<T> *io = gethead();int x;cin>>x;//设置x个T i;while (x >0) {cin >> i;io->next = new linknode<T>(i);io = io->next;x--;}}void f(linknode<T>* io){linknode<T>* ioo=gethead();ioo=ioo->next;cout<<first->date<<endl;return;}
};
template<class T>
bool list<T>::getdate(int i,T&x){linknode<T>* io=locate(i);if(io!=NULL){x=io->date;return true;}else{return false;}
}
template<class T>
void list<T>::setdate(int i,T&x){linknode<T>* io=locate(i);if(io!=NULL){io->date=x;return;}
}
template <class T>
linknode<T>* list<T>::search(T x){linknode<T>* io=gethead()->next;while(io!=NULL){if(io->date==x){return io;}else{io=io->next;}}return NULL;
}
template<class T>
int list<T>::length(){linknode<T>*io=gethead()->next;//不加头结点int i=0;while(io!=NULL){i++;io=io->next;}return i;
}
template <class T>
bool list<T>::insert(int i ,T&x){linknode<T>*io=locate(i);if(io==NULL){return false;}linknode<T>* newnode=new linknode<T>(x);newnode->next=io->next;io->next=newnode;return true;
}
template <class T>
bool list<T>::remove(int i,T&x){linknode<T>* io=locate(i-1);if(io==NULL||io->next==NULL){//一定要在io存在的情况下才会有nextreturn false;}io->next=io->next->next;return true;
}
template<class T>
linknode<T>* list<T>::locate(int i){//设附加头结点为-1的位置,则要向后移动i+1位置,因为从0开始if(i<0){return NULL;//本身first的地址也为NULL}linknode<T>* io=gethead()->next;//从0开始,first为-1int j=0;while(j<i&&io!=NULL){//注意应该是j<i.因为是得到i的位置,所以应该让循环结束为j==i;io=io->next;j++;}return io;
}
int main() {list<int>*io=new list<int>(12);io->input();linknode<int>* op=io->gethead();io->f(op);int x;io->getdate(1,x);cout<<"getdate:"<<x<<endl;//2linknode<int>* ioo=io->locate(1);//1 2 3 4 5cout<<"locate:"<<ioo->date<<endl;//2ioo=io->search(x);cout<<"search:"<<ioo->date<<endl;//找到x的值之后返回对应的地址,然后赋值给ioo再由ioo进行访问cout<<"length:"<<io->length()<<endl;cout<<"isempty:"<<io->Isempty()<<endl;ioo=io->gethead();cout<<"gethead:"<<ioo->next->date<<endl;//使用gethead获取到头结点后由他的下一项进行判断,因为第一项为NULL// 1 2  3 4 5io->setdate(0,x);//就为first->next,此时ioo就为first的位置,此时x的值为2cout<<"setdate:"<<ioo->next->date<<endl;//得到的就是设置0号位后的值,2 2 3 4 5io->insert(0,x);//从i=1处添加ioo=io->locate(1);cout<<"insert:"<<ioo->date<<" "<<ioo->next->date<<endl;//2 2 2 3 4 5io->remove(2,x);//2 2 3 4 5cout<<"remove:"<<x<<endl;//2return 0;
}

数据结构-单链表实现相关推荐

  1. 20175330 数据结构-单链表(选做)

    要求 参见附件,补充MyList.java的内容,提交运行结果截图(全屏) 课下推送代码到码云 ``` public class MyList {     public static void mai ...

  2. php链表和联表的区别,PHP_浅谈PHP链表数据结构(单链表),链表:是一个有序的列表,但 - phpStudy...

    浅谈PHP链表数据结构(单链表) 链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个 ...

  3. 数据结构——单链表的C++实现

    数据结构--单链表的C++实现 \qquad单链表的创建.求长度.查找.插入和删除的C++实现. #include<iostream> using namespace std;//1.定义 ...

  4. php mysql 链表_浅谈PHP链表数据结构(单链表)

    链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个程序运行时,内存分成五个区(堆区, ...

  5. python 单链表是否有回路_(Python3)数据结构--单链表之判断链表是否有环

    前言 有Python基础 有数据结构单链表基础,没接触过的可以看下面链接 https://blog.csdn.net/sf9898/article/details/104946291 原理和实现 有一 ...

  6. 数据结构 —— 单链表(超详细图解 接口函数实现)

    系列文章目录 数据结构 -- 顺序表 数据结构 -- 单链表 数据结构 -- 双向链表 数据结构 -- 队列 数据结构 -- 栈 数据结构 -- 堆 数据结构 -- 二叉树 数据结构 -- 八大排序 ...

  7. C语言数据结构单链表链表

    数据结构–单链表 学习了顺序表,我们发现顺序表在向里面存放数据的时候很麻烦,比如我们要使用头插法存放一个数据到顺序表的时候,我们要将整个表都向后挪一位,这个操作就让人很难受.那么有没有一种结构可以让我 ...

  8. 数据结构——单链表(小白入门第二天)

    一.什么是单链表? 定义:每个结点 除了存放数据元素外,还要存储指向下一个节点的指针: 优点:不要求大片连续空间,改变容量方便: 缺点:不可随机存取,要耗费一定空间存放指针 局限性:无法逆向检索 二. ...

  9. 数据结构-单链表基本操作(C语言实现)

    参考书:王道考研数据结构 (此贴为博主学习408的笔记,因博主也是学习者,个人总结如有错误欢迎指正.如有侵权请告知,马上删除致歉)​​ 单链表定义 单链表是线性表的链式存储,通过一组任意的存储单元来存 ...

  10. 数据结构 -- 单链表

          快要放假了,实在是待不住了,论文也看不下去,也没啥其他的事做,就写写常用的数据结构吧,正好下个学期就要找工作了,也是方便以后自己使用这些数据结构,好吧,这里实现的数据结构没有太多的错误控制 ...

最新文章

  1. 10hibernate_one2many_1
  2. 揭秘大型网站架构进化之路
  3. iOS和android运存机制,为什么苹果4GB运存却比安卓8GB更丝滑流畅?看完立马涨知识了...
  4. Java中读取属性文件以及做资源国际化
  5. spring boot学习(5): 进程exit code自定义
  6. 用matlab画图的好处,用matlab画图注意事项
  7. 学习笔记--asp.net页生命周期(转自msdn,仅为自己学习存储和有意读者使用)
  8. Nagios 监控windows性能计数器
  9. tensorflow基础:tf.data.Dataset.from_tensor_slices() 与 tf.data.Dataset.from_generator()的异同
  10. 【Tricks】半监督深度学习训练和实现小Tricks
  11. jquery 源码分析
  12. OpenWebFlow0.9用户手册与设计说明
  13. spring 多租户数据源实现事务一致性
  14. JAVA分布式快速开发基础平台iBase4J
  15. Redis发布订阅[西橙先生]
  16. 常用LDO低压差线性稳压芯片封装型号以及基本电路
  17. 人再囧途之泰囧.BD高清1280国语中英双字 附下载地址
  18. python爬虫实践——爬取豆瓣电影排行榜
  19. 2009年以来我买过的书(部分)
  20. 四种常见的post请求中的参数形式

热门文章

  1. 注入dll到一个进程里面
  2. Flink 容错机制:Checkpoints、Savepoints
  3. TeamCity和GitLab整合
  4. docker学习笔记(一)docker入门
  5. 从 Nginx、Apache 工作原理看为什么 Nginx 比 Apache 高效!
  6. FastDFS安装与部署
  7. ​关于深度学习、NLP和计算机视觉的30个顶级Python库
  8. 【线上分享】短视频出海 — 用户体验衡量关键指标与优化策略
  9. 端到端神经视频编码=A Better Trade-off ?
  10. 从LiveVideoStackCon 2019北京看多媒体技术趋势