文档章节

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
粉丝 30
博文 549
码字总数 352132
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

Bash各类扩展详解

Bash各类扩展详解 Bash中主要包括大括号扩展、波浪号扩展、变量扩展、子命令扩展、文件名扩展和算数扩展。这些扩展组合在一起为Bash带来了极大的易用性。掌握这些扩展的用法和功能,能够为B...

小陶小陶
58分钟前
1
0
EventBus原理深度解析

一、问题描述 在工作中,经常会遇见使用异步的方式来发送事件,或者触发另外一个动作:经常用到的框架是MQ(分布式方式通知)。如果是同一个jvm里面通知的话,就可以使用EventBus。由于Event...

yangjianzhou
今天
5
0
OpenCV图像处理实例:libuv+cvui显示摄像头视频

#include <iostream>#include <opencv2/opencv.hpp>#define CVUI_IMPLEMENTATION#include <cvui.h>extern "C"{#include <uv.h>}using namespace std;#define WINDOW_NAM......

IOTService
今天
3
0
openJDK之JDK9的String

1.openJDK8的String 先来看下openJDK8的String的底层,如下图1.1所示: 图1.1 底层上使用的是char[],即char数组 每个char占16个bit,Character.SIZE的值是16。 2.openJDK9中的String 图2.1...

克虏伯
今天
3
0
UEFI 模式下如何安装 Ubuntu 16.04

作者:知乎用户 链接:https://www.zhihu.com/question/52092661/answer/259583475 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 针对UEFI模式下安装U...

寻知者
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部