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
  • 相关阅读:
    LeetCode Missing Number (简单题)
    LeetCode Valid Anagram (简单题)
    LeetCode Single Number III (xor)
    LeetCode Best Time to Buy and Sell Stock II (简单题)
    LeetCode Move Zeroes (简单题)
    LeetCode Add Digits (规律题)
    DependencyProperty深入浅出
    SQL Server存储机制二
    WPF自定义RoutedEvent事件示例代码
    ViewModel命令ICommand对象定义
  • 原文地址:https://www.cnblogs.com/beautiful-code/p/4925412.html
Copyright © 2011-2022 走看看