文档章节

Link

MtrS
 MtrS
发布于 2017/05/17 08:34
字数 280
阅读 9
收藏 0
点赞 0
评论 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
博文 474
码字总数 352132
作品 0
榆林
数据库防火墙 GreenSQL 升级至1.0版本

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

老枪 ⋅ 2009/04/14 ⋅ 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 ⋅ 2

reverse a linked list -- C

original geeksforgeeks

BruceLinxu ⋅ 01/24 ⋅ 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 ⋅ 0

测试php与mysql的连接是否成功的多种方法

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

小左2010925 ⋅ 2016/12/26 ⋅ 0

JAVA ListF表操作

public class ListDemo { public static void main(String[] args) { LinkedList link =new LinkedList(); link.add("1"); link.add("2"); link.add("3"); link.add("4"); link.add("5"); li......

空清城 ⋅ 2013/07/12 ⋅ 5

css link和@import区别用法

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

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

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 ⋅ 4

MDCache中对dentry link的理解

MDCache中senddentrylink()函数负责发送dentry link到其他MDS进程。发送端遍历replicamap数组,得到CDentry对应的CDentry::linkaget类对象,之后创建MDentryLink类消息,若CDentry::linkaget...

linuxhunter ⋅ 2016/08/09 ⋅ 0

STLPort编译过程及出错解决

stlport编译问题: 运行configure.bat msvc8 进入build/lib目录,运行nmake clean install 编译过程会报错,cstdlib.h文件中abs重定义,注释掉那一行代码再重新build,文件路径stlportstl_cs...

木头r ⋅ 2015/01/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 今天 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 今天 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 今天 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部