数据结构 带头结点的单链表 操作大全 最全的链表操作(c++实现)
2015-09-27 21:23
671 查看
实现了链表的大部分操作
一共1800多行代码,22个功能,应该是目前网上最全的了
代码均为原创,如需转载请注明出处:http://blog.csdn.net/u012350104
欢迎交流
采用多文件编程,层次清晰
对各个可能出错的地方进行了验证,拒绝bug
下面这个排序函数虽然功能正常完成,但实际上是我按照结果进行补救的结果,如果哪位大神帮忙,感激不尽
bool sort(string elementDetailType,string upOrDown);//按升(降)排序(冒泡)
实现的功能:
=====开始=====
==增加(1)==
==删除(2)==
==修改(3)==
==查询(4)==
==退出(0)==
============
==============增加==============
==输入一个元素,到链表末尾-(1)==
==输入一个元素,到第n个位置--(2)==
==插入三个预设元素到表末尾---(3)==
============返回(0)============
================================
=====================删除=================
==删除所有的元素(除第头节点)(双指针)-(1)==
==删除所有的元素(除第头节点)(递归)---(2)==
==删除第n个元素----------------------(3)==
==查找元素,并删除--------------------(4)==
==================返回(0)================
=========================================
==============修改==============
==输入一个元素,替换第n个元素(1)==
==把第n1个元素和第n2个交换--(2)==
==按升(降)排序(冒泡法)---(3)==
==移除所有重复节点----------(4)==
============返回(0)============
================================
===================查询=================
==得到存储的元素个数----------------(1)==
==得到链表容量---------------------(2)==
==输出第n个元素的细节---------------(3)==
==输出倒数
第n个节点的信息(双指针)-(4)==
==输出倒数
第n个节点的信息(递归)---(5)==
==输出中间
节点的信息(双指针)------(6)==
==输出中间
节点的信息(递归)-------(7)==
==输出所有的元素细节----------------(8)==
==逆序输出所有节点的信息(递归)-----(9)==
==通过某个元素细节找到元素位置--------(10)==
==查找元素并输出--------------------(11)==
===================返回(0)=============
========================================
所有代码一共由7个文档组成,我打了个包,欢迎下载交流:
http://download.csdn.net/detail/u012350104/9143185
代码对应的函数关系讲解PPT:
http://download.csdn.net/detail/u012350104/9143181
代码量太大,我在这里只放出主函数及头文件,具体实现请按照上面的链接下载
欢迎在下方留言交流
一共1800多行代码,22个功能,应该是目前网上最全的了
代码均为原创,如需转载请注明出处:http://blog.csdn.net/u012350104
欢迎交流
采用多文件编程,层次清晰
对各个可能出错的地方进行了验证,拒绝bug
下面这个排序函数虽然功能正常完成,但实际上是我按照结果进行补救的结果,如果哪位大神帮忙,感激不尽
bool sort(string elementDetailType,string upOrDown);//按升(降)排序(冒泡)
实现的功能:
=====开始=====
==增加(1)==
==删除(2)==
==修改(3)==
==查询(4)==
==退出(0)==
============
==============增加==============
==输入一个元素,到链表末尾-(1)==
==输入一个元素,到第n个位置--(2)==
==插入三个预设元素到表末尾---(3)==
============返回(0)============
================================
=====================删除=================
==删除所有的元素(除第头节点)(双指针)-(1)==
==删除所有的元素(除第头节点)(递归)---(2)==
==删除第n个元素----------------------(3)==
==查找元素,并删除--------------------(4)==
==================返回(0)================
=========================================
==============修改==============
==输入一个元素,替换第n个元素(1)==
==把第n1个元素和第n2个交换--(2)==
==按升(降)排序(冒泡法)---(3)==
==移除所有重复节点----------(4)==
============返回(0)============
================================
===================查询=================
==得到存储的元素个数----------------(1)==
==得到链表容量---------------------(2)==
==输出第n个元素的细节---------------(3)==
==输出倒数
第n个节点的信息(双指针)-(4)==
==输出倒数
第n个节点的信息(递归)---(5)==
==输出中间
节点的信息(双指针)------(6)==
==输出中间
节点的信息(递归)-------(7)==
==输出所有的元素细节----------------(8)==
==逆序输出所有节点的信息(递归)-----(9)==
==通过某个元素细节找到元素位置--------(10)==
==查找元素并输出--------------------(11)==
===================返回(0)=============
========================================
所有代码一共由7个文档组成,我打了个包,欢迎下载交流:
http://download.csdn.net/detail/u012350104/9143185
代码对应的函数关系讲解PPT:
http://download.csdn.net/detail/u012350104/9143181
代码量太大,我在这里只放出主函数及头文件,具体实现请按照上面的链接下载
// // main.cpp // 链表 // // Created by Fred韩 on 15/9/2. // Copyright (c) 2015年 Fred韩. All rights reserved. // #include <iostream> #include "LinkedList.h" using namespace std; int main(int argc, const char * argv[]) { cout<<"Copyright (c) 2015年 Fred韩. All rights reserved."<<endl; cout<<"实现了对链表的增删改查等操作"<<endl; cout<<endl; LinkedList list; list.startControlLoop(); cout<<"程序已退出,感谢使用。"<<endl; cout<<"Copyright (c) 2015年 Fred韩. All rights reserved."<<endl; return 0; }
// // ElemType.h // 链表 // // Created by Fred韩 on 15/9/2. // Copyright (c) 2015年 Fred韩. All rights reserved. // #ifndef __ELEMTYPE_H__ #define __ELEMTYPE_H__ #include <iostream> #include <string> using namespace std; class ElemType { protected: string m_flight;//航班号 string m_type;//飞机型号 string m_begin;//起飞时间 string m_end;//到达时间 string m_from;//出发地 string m_to;//目的地 public: ElemType();//构造函数,不进行任何操作,创建数组时,系统会自动调用无参数的构造函数,但因重载过下面的构造函数,系统默认的构造函数失效,需要手动写出这个无参数的构造函数才行 ElemType(string flight,string type,string begin,string end,string from,string to);//直接设置所有细节的构造函数 ElemType(const ElemType &element);//复制构造函数 bool showDetail();//在控制台显示细节 bool setDetail(string flight,string type,string begin,string end,string from,string to);//设置所有细节 bool inputDetail();//在控制台输入细节 //对成员属性进行封装,set方法中包含合法性验证 string getFlight(); static bool isFlightRight(string flight); bool setFlight(string flight); string getType(); static bool isTypeRight(string type); bool setType(string type); string getBegin(); static bool isBeginRight(string begin); bool setBegin(string begin); string getEnd(); static bool isEndRight(string end); bool setEnd(string end); string getFrom(); static bool isFromRight(string from); bool setFrom(string from); string getTo(); static bool isToRight(string to); bool setTo(string to); string getTime();//通过起飞时间和降落时间计算出飞行时间长度(按飞行时间不超过24小时计算) static bool isEqual(ElemType elem1,ElemType elem2);//判断两个ElemType类型的对象是否相同 }; #endif //__ELEMTYPE_H__
// // Node.h // 链表 // // Created by Fred韩 on 15/9/2. // Copyright (c) 2015年 Fred韩. All rights reserved. // #ifndef __NODE_H__ #define __NODE_H__ #include "ElemType.h" class Node { protected: ElemType m_data; Node* m_next; public: Node(); Node(string flight,string type,string begin,string end,string from,string to); Node* getNext(); bool setNext(Node* next); ElemType& getData(); bool setData(ElemType data); }; #endif//__NODE_H__
// // LinkedList.h // 链表 // // Created by Fred韩 on 15/9/2. // Copyright (c) 2015年 Fred韩. All rights reserved. // #ifndef __LINKED_LIST_H__ #define __LINKED_LIST_H__ #include "Node.h" #include "ElemType.h" class LinkedList { protected: Node* m_head; public: LinkedList();//构造函数,初始化头指针,并添加开始节点 Node* getHead(); bool setHead(Node* head); bool addNode();//添加3个预设的节点,到链表末尾 bool addNode(Node* node);//添加节点到链表末尾 bool addNode(Node* node,size_t n);//添加节点,使其成为第n个节点,其余节点后移 bool inputNode();//输入一个节点的信息,并添加到链表的末尾 bool inputNode(size_t n);//输入一个节点的信息,使其成为第n个节点,其余节点后移 bool delNode();//删除所有的节点(除第头节点)(双指针) bool delNode2();//删除所有的节点(除第头节点)(递归) void delNode2Recursive(Node* node);//删除所有的节点的 递归函数 bool delNode(size_t n);//删除第n个节点 bool delNode(string elementDetailType,string elementDetail);//输入要查找的条目和要查找的内容,找到对应节点并删除 bool replaceNode(Node* node,size_t n);//用一个节点,替换掉第n个节点 bool exchangeNode(size_t n1,size_t n2);//把第n1个节点,与第n2个节点,交换位置 bool sort(string elementDetailType,string upOrDown);//按升(降)排序(冒泡) bool removeSameNode();//移除所有重复节点 size_t getLength();//得到节点数 Node* getNode(size_t n);//得到第n个节点的指针 bool showNode();//输出所有节点的信息 bool showNodeStatFromEnd();//逆序 输出所有节点的信息(递归) void showNodeStatFromEndRecursive(Node* node);//逆序 输出所有节点的信息的 递归函数 bool showNode(size_t n);//输出第n个节点的信息 bool showNodeStartFromEnd(size_t n);//输出 倒数 第n个节点的信息(双指针) bool showNodeStartFromEnd2(size_t n);//输出 倒数 第n个节点的信息(递归) void showNodeStartFromEnd2Recursive(Node* node,size_t &n);//输出 倒数 第n个节点的信息的 递归函数 bool showCentralNode();//输出 中间 节点的信息(双指针) bool showCentralNode2();//输出 中间 节点的信息(递归) void showCentralNode2Recursive(Node* node,int &n,int &max);//输出 中间 节点的信息的 递归函数 bool showNode(string elementDetailType,string elementDetail);//输入要查找的条目和要查找的内容,找到对应节点并输出 size_t findNode(string elementDetailType,string elementDetail);//传入查找的条目和要查找的内容,输出节点位置 static int inputAInt(int min = 0,int max = 9,int defaultValue = -1);//从键盘读取,限制为一个min到max间的整数,非法情况返回defaultValue void startControlLoop();//打开控制界面 ~LinkedList();//析构函数,释放new出来的空间 }; #endif//__LINKED_LIST_H__ 1878
欢迎在下方留言交流
相关文章推荐
- 数据结构之树
- 将帅问题解读
- 数据结构 顺序表(c++实现)
- 基本数据结构(1)——算法导论(11)
- 【数据结构之旅】稀疏矩阵的快速转置
- 数据结构实验一____单链表操作
- ACM题集以及各种总结大全!
- 数据结构实验1-顺序表-各种操作
- 数据结构------快排及另类快排思想解决问题
- [数据结构]二叉排序树
- 数据结构-线性表-栈-递归
- 数据结构 4____计算时间复杂度
- 数据结构,多项式运算,C++,链表
- 一元多项式的加减乘除运算,C++语言描述,数据结构实验
- [数据结构]Hash表初学(数组链表)
- 数据结构顺序栈的创建、初始化、出栈、入栈及销毁
- 数据结构基础 之 最长递增子序列
- (数据结构笔记)二叉查找树的实现
- 数据结构学习笔记——树
- 数据结构学习总结——预备知识