文档章节

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
粉丝 32
博文 568
码字总数 358711
作品 0
榆林
私信 提问
reverse a linked list -- C

original geeksforgeeks

BruceLinxu
2018/01/24
5
0
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
Burg Manager

Burg Manager 是一款用于管理Burg的易用软件。 Burg Manager 1.0 添加了从ISO启动的功能。 此外,还内置了一些新主题。 下载Burg Manager 1.0 首先,卸载老版本: sudo apt-get purge burg-...

匿名
2010/11/14
2.6K
0
测试php与mysql的连接是否成功的多种方法

测试php与mysql的连接是否成功的多种方法其实使用的就是一个php的函数: mysql_connect(); 定义 mysql_connect() 函数打开非持久的 MySQL 连接。 用法:...

小左2010925
2018/06/26
0
0
css link和@import区别用法

1、link语法结构 实际应用截图: 使用link标签截图 Html link标签说明 此标签是引入CSS文件link标签,只要设置好路径即可。 扩展阅读:html link 2、@import语法结构 @import + 空格+ url(CSS...

科技探索者
2017/11/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java springcloud B2B2C o2o多用户商城 springcloud架构-docker-feign配置(五)

简介 上一节我们讨论了怎么用feign声明式调用cloud的生产者,这节我们讨论一下feign配置,通过编写配置类,我们可以自定义feign的日志级别,日志扫描目录,可以通过feign调用服务在eureka上的...

sccspuercode
19分钟前
1
0
长连接的心跳及重连设计

前言 说道“心跳”这个词大家都不陌生,当然不是指男女之间的心跳,而是和长连接相关的。 顾名思义就是证明是否还活着的依据。 什么场景下需要心跳呢? 目前我们接触到的大多是一些基于长连接...

crossoverJie
20分钟前
1
0
OSChina 周三乱弹 —— 风扇写着先生请自爱

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @蚂蚁哈哈哈 :分享陈奕迅的单曲《落花流水》 《落花流水》- 陈奕迅 手机党少年们想听歌,请使劲儿戳(这里) @车谷 :我发现每天上班都好困 ...

小小编辑
今天
705
13
centos7重置密码、单用户模式、救援模式、ls命令、chmod命令

在工作当中如果我们错误的配置了文件使服务器不能正常启动或者忘记密码不能登录系统,如何解决这些问题呢?重装系统是可以实现的,但是往往不能轻易重装系统的,下面用忘记密码作为例子讲解如...

李超小牛子
今天
4
0
Python如何开发桌面应用程序?Python基础教程,第十三讲,图形界面

当使用桌面应用程序的时候,有没有那么一瞬间,想学习一下桌面应用程序开发?行业内专业的桌面应用程序开发一般是C++,C#来做,Java开发的也有,但是比较少。本节课会介绍Python的GUI(图形用...

程序员补给栈
今天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部