博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Link
阅读量:5889 次
发布时间:2019-06-19

本文共 2755 字,大约阅读时间需要 9 分钟。

hot3.png

#include 
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;}

转载于:https://my.oschina.net/innovation/blog/902515

你可能感兴趣的文章
作业2
查看>>
nginx的信号量
查看>>
云im php,网易云IM
查看>>
DEFERRED_SEGMENT_CREATION
查看>>
Ada boost学习
查看>>
开源 java CMS - FreeCMS2.3字典管理
查看>>
block,inline和inline-block概念和区别
查看>>
移动端常见随屏幕滑动顶部固定导航栏背景色透明度变化简单jquery特效
查看>>
javascript继承方式详解
查看>>
白话讲反射技术 --- 适合初学者入门引导
查看>>
css变形 transform
查看>>
win7家庭版添加组策略编辑器
查看>>
lnmp环境搭建
查看>>
自定义session扫描器精确控制session销毁时间--学习笔记
查看>>
【转】EDK简单使用流程(3)
查看>>
Ubuntu中无法update的解决办法
查看>>
仿射变换
查看>>
decltype类型指示符
查看>>
虹软ArcFace人脸识别 与 Dlib 人脸识别对比
查看>>
laravel 验证码使用示例
查看>>