文档章节

Link

MtrS
 MtrS
发布于 2017/05/17 08:34
字数 280
阅读 9
收藏 0
#include <iostream>

enum {kIsSmaller,kIsLarger, kIsSame};

class Data{

    public:
        Data(int newVal):value(newVal){}
        ~Data(){}
        int compare(const Data&);
        void show(){std::cout << value << "\n";}
    private:
        int value;
};

int Data::compare(const Data& otherData){
    if(value < otherData.value)
        return kIsSmaller;
    if(value > otherData.value)
        return kIsLarger;
    else
        return kIsSame;
}

class Node;
class HeadNode;
class TailNode;
class InternalNode;

class Node{
    public:
        Node() {}
        virtual ~Node(){}
        virtual Node* insert(Data*data) =0;
        virtual void show() = 0;
    private:
};

class InternalNode: public Node{

    public:
        InternalNode(Data*dara, Node*next);
        virtual ~InternalNode() {delete next;delete data;}
        virtual Node *insert(Data*data);
        virtual void show(){
            data -> show();
            data -> show();
        }

    private:
        Data *data;
        Node *next;
};

InternalNode::InternalNode(Data* newData, Node *newNext):
    data(newData), next(newNext){
    }
Node *InternalNode::insert(Data *otherData){

    int result = data->compare(*otherData);
    switch(result){
        case kIsSame:
        case kIsLarger:{
                           InternalNode *dataNode = new InternalNode(otherData, this);
                           return dataNode;
                       }
        case kIsSmaller:
                       next = next->insert(otherData);
                       return this;
    }
}

class TailNode:public Node{
    public:
        TailNode(){}
        virtual ~TailNode(){}
        virtual Node *insert(Data *data);
        virtual void show(){}
    private:
};

Node * TailNode::insert(Data *data){
    InternalNode *dataNode = new InternalNode(data,this);
    return dataNode;
}

class HeadNode:public Node{
    public:
        HeadNode();
        virtual ~HeadNode() {delete next;}
        virtual Node * insert(Data *data);
        virtual void show(){next ->show();}
    private:
        Node *next;
};

HeadNode::HeadNode(){
    next = new TailNode;
}

Node * HeadNode::insert(Data*data){
    next = next -> insert(data);
    return this;
}

class LinkedList{

    public:
        LinkedList();
        ~LinkedList(){delete head;}
        void insert(Data*data);
        void showAll() {head -> show();}
    private:
        HeadNode * head;

};

LinkedList::LinkedList(){
    head = new HeadNode;
}
void LinkedList::insert(Data* pData){
    head -> insert(pData);
}

int main(){
    Data * pData;
    int val;
    LinkedList ll;
    while(true){

        std::cout << "What value (0 to stop)?";
        std::cin >> val;

        if (!val)
            break;
        pData = new Data(val);
        ll.insert(pData);
    }
    ll.showAll();
    return 0;
}

© 著作权归作者所有

共有 人打赏支持
MtrS
粉丝 31
博文 553
码字总数 352611
作品 0
榆林
私信 提问
reverse a linked list -- C

original geeksforgeeks

BruceLinxu
01/24
5
0
数据库防火墙 GreenSQL 升级至1.0版本

数据库防火墙程序GreenSQL,用来防止SQL注入攻击,其已经升级至1.0版本。 在GreenSQL 0.84版本增加了新的mysql类型;0.94版本是个里程碑,其性能表现更加优异,并包括流行的linux系统的预建包...

老枪
2009/04/14
750
0
oracle查询数据重复

SQL 1: select t4.preoperactionid from TCTLINKOPEREXECONDITION t4 left join TCTREFLINKOPERACTION t5 on t4.linkoperactionid = t5.linkoperactionid where t5.linkid = 1057 and t5.pla......

北方蛮子
2013/01/08
471
2
mysql 子查询 效率问题

SELECT * FROM reg_dog WHERE dog_id IN ( SELECT linkDog.dog FROM tcompetescreeningslink link ,tcompetescreeningslinkdog linkDog WHERE link.screenings = 1 AND link.status > 1 AND ......

java小愤青
2013/04/02
964
4
Usable Icons for jQuery

Improving Usability through jQuery This plugin was conceived to improve usability on website's content, adding an icon on each element called through links. The ones below are s......

匿名
2008/09/19
384
0

没有更多内容

加载失败,请刷新页面

加载更多

linux-scp 远程拷贝报错原因

刚拿到一台重装后的服务器,远程ssh都正常,但是一scp拷贝东西就报错: 本地确定是有scp命令的,而且如果是本地没有scp不会报后面那句lost connection,因此就是远程没有scp这个命令。因此在...

linuxprobe16
25分钟前
1
0
OSChina 周六乱弹 —— 谁小时候没当过熊孩子呀

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《行尸走肉》- amazarashi 《行尸走肉》- amazarashi 手机党少年们想听歌,请使劲儿戳(这里) @神话 :周五了,周末干啥...

小小编辑
50分钟前
35
1
docker部署springboot项目

安装docker 菜鸟教程 springboot项目 maven依赖 <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001......

yimingkeji
今天
14
0
1: Cordova 配置WebView可以打开外部链接

一、问题:在使用Cordova生成的Android App中默认情况下WebView中的超链接,如果不是相对链接,会默认使用浏览器打开。 如果想用默认webview打开 解决方案:修改config.xml文件添加链接配置节...

wecloudnet
今天
1
0
Beetl介绍以及集成SpringBoot2.0 ---《Beetl视频课程》(1)

目的:引导阅读官方文档 目标:实现一个自己的博客 一、Beetl介绍 Beetl目前版本是2.9.3,相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,以及编写的模板容易维护等特点。使得开发...

Gavin-King
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部