实现了链表的大部分操作
一共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
欢迎在下方留言交流