zoukankan      html  css  js  c++  java
  • 单链表的结点类模板

    C++语言程序设计进阶 (2015年秋) 郑莉教授

     http://www.xuetangx.com/courses?org=-1&cid=117&page_type=0&page=2

    单链表

    //单链表的结点类模板
    template <class T>
    class Node{
        private:
            Node<T> *next;//后继结点的指针
        public:
            T data;
            Node(const T& item,Node<T>*next = 0)
            //构造函数第一个参数,结点容纳的数据项和下一个结点指针初始化为0
            void insertAfter(Node<T> *p);
            //当前结点之后插入一个新的结点    
            Node<T> *deleteAfter();//删除当前结点下一个结点的函数
            Node<T> *nextNode() const;    //返回当前结点下一个结点的指针
    };

    插入结点

    template <class T>
    void Node<T>::insertAfter(Node<T> *p){
        //p结点指针域指向当前结点的后继结点
        p->next = next;
        next = p;
    }

    删除结点

    Node<T> *Node<T>::deleteAfter(void){
        Node<T> *tempPtr = next;
        if(next == 0)
            return 0;
        next = tempPtr->next;
        return tempPtr;    
    }

    结点类代码

    //Node.h
    #ifndef NODE_H
    #define NODE_H
    //类模板的定义
    template <class T>
    class Node {
    private:
        Node<T> *next;  //指向后继结点的指针
    public:
        T data; //数据域
        Node (const T &data, Node<T> *next = 0);    //构造函数
        void insertAfter(Node<T> *p);   //在本结点之后插入一个同类结点p 
        Node<T> *deleteAfter(); //删除本结点的后继结点,并返回其地址
        Node<T> *nextNode();            //获取后继结点的地址
        const Node<T> *nextNode() const;     //获取后继结点的地址
    };
    
    //类的实现部分
    //构造函数,初始化数据和指针成员
    template <class T>
    Node<T>::Node(const T& data, Node<T> *next = 0 ) : data(data), next(next) { }
    //返回后继结点的指针
    template <class T>
    Node<T> *Node<T>::nextNode() {
        return next;
    }
    //返回后继结点的指针
    template <class T>
    const Node<T> *Node<T>::nextNode() const {
        return next;
    } 
    //在当前结点之后插入一个结点p 
    template <class T>
    void Node<T>::insertAfter(Node<T> *p) {
        p->next = next; //p结点指针域指向当前结点的后继结点
        next = p;    //当前结点的指针域指向p 
    }
    //删除当前结点的后继结点,并返回其地址
    template <class T> Node<T> *Node<T>::deleteAfter() {
        Node<T> *tempPtr = next;//将欲删除的结点地址存储到tempPtr中
        if (next == 0)  //如果当前结点没有后继结点,则返回空指针
            return 0;
        next = tempPtr->next;//使当前结点的指针域指向tempPtr的后继结点
        return tempPtr;         //返回被删除的结点的地址
    }
    #endif //NODE_H
  • 相关阅读:
    10 Unit Testing and Automation Tools and Libraries Java Programmers Should Learn
    nginx unit java 试用
    Oracle Trace文件生成及查看
    记录数过亿条的表数据维护-数据删除
    对于上千万甚至上亿的数据,如何正确的删除?
    怎么快速删除大数据量表
    如何启动或关闭oracle的归档(ARCHIVELOG)模式
    oracle清理归档日志(缓存)
    HTTP和HTTPS协议,看一篇就够了
    HTTP与HTTPS对访问速度(性能)的影响
  • 原文地址:https://www.cnblogs.com/beautiful-code/p/4925412.html
Copyright © 2011-2022 走看看