加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C++字典的线性表实现

发布时间:2020-12-16 07:43:07 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #include iostream #include assert.h using namespace std; struct SchoolNo { int no; friend bool operator == (const SchoolNo school1,const Sch

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

    #include <iostream>  
    #include <assert.h>  
      
    using namespace std;  
      
    struct SchoolNo  
    {  
        int no;  
        friend bool operator == (const SchoolNo &school1,const SchoolNo &school2)  
        {  
            return (school1.no==school2.no);  
        }  
    friend  ostream & operator <<(ostream &_O,const SchoolNo &school)  
        {  
            _O<<school.no;  
            return _O;  
        }  
        friend bool operator < (const SchoolNo &school1,const SchoolNo &school2)  
        {  
            return school1.no<school2.no;  
        }  
        friend bool operator > (const SchoolNo &school1,const SchoolNo &school2)  
        {  
            return school1.no>school2.no;  
        }  
        friend bool operator <= (const SchoolNo &school1,const SchoolNo &school2)  
        {  
            return school1.no<=school2.no;  
        }  
        friend bool operator >= (const SchoolNo &school1,const SchoolNo &school2)  
        {     
            return school1.no>=school2.no;  
        }  
        friend bool operator != (const SchoolNo &school1,const SchoolNo &school2)  
        {  
            return school1.no!=school2.no;  
        }  
    };  
    struct Information  
    {  
        friend ostream & operator<<(ostream &_O,const Information &_I)  
        {  
            _O<<"t"<<_I.age<<"t"<<_I.name<<endl;  
            return _O;  
        }  
        int age;  
        char name[13];  
    };  
      
    template<typename K,typename E>  
    class SortedChain;  
      
    template<typename K,typename E>  
    class ChainNode  
    {  
        friend class SortedChain<K,E>;  
        public:  
        ChainNode():next(NULL){}  
        ChainNode(K k,E e):key(k),data(e),next(NULL){}  
        friend ostream &operator<<(ostream &_O,const ChainNode<K,E> &node)  
        {  
            _O<<node.key<<node.data;  
            return _O;  
        }  
        private:  
        E data;  
        K key;  
        ChainNode *next;  
    };  
      
    template<typename K,typename E>  
    class SortedChain  
    {  
        public:  
        SortedChain()  
        {  
            first = new ChainNode<K,E>();  
            assert(first!=NULL);  
        }  
        ~SortedChain()  
        {  
            delete []first;  
          first=NULL;  
        }  
        public:  
        ChainNode<K,E> &Search(const K key)const//搜索。  
        {  
            ChainNode<K,E> *p = first;  
            while(p!=NULL)  
            {  
                if(p->key==key)  
                        break;  
                    p=p->next;  
            }  
            return *p;  
        }  
        void Insert(const K key,E &e)  
        {  
            ChainNode<K,E> *node = new ChainNode<K,E>();  
            node->data=e;  
            node->key=key;  
            node->next=NULL;  
            ChainNode<K,E> *p = first;  
          while(p->next!=NULL&& p->next->key<key)//重载  
            {  
                  p=p->next;  
            }  
          node->next = p->next;  
            p->next=node;  
        }  
        friend ostream & operator<<(ostream &_O,const SortedChain<K,E> &node)  
        {  
            _O<<node.key;  
            return _O;  
        }  
        void view()  
        {  
            ChainNode<K,E> *p = first;  
            cout<<"学号"<<"t"<<"年纪"<<"t"<<"名字"<<endl;  
            while(p->next!=NULL)  
            {  
                cout <<p->next->key<<p->next->data ;  
                p=p->next;  
            }  
        }  
        bool Remove(const K key,E &e)   //删除。  
        {  
            ChainNode<K,E> *p = first;  
            while(p->next!=NULL && p->next->key!=key)  
            {  
                p = p->next;  
            }  
            ChainNode<K,E> *q = p->next;  
            p->next = q->next;  
            delete q;  
        }     
        ChainNode<K,E> *Begin()const //定位第一个。  
        {  
            return (first->next);  
        }  
        ChainNode<K,E> &Next(ChainNode<K,E> *current)const//定位下一个。  
      {  
            return *(current->next);  
        }  
        private:  
        ChainNode<K,E> *first;  
    };  
    int main()  
    {  
        SortedChain<SchoolNo,Information> a;  
        Information _I1={100,"感动天"};  
        Information _I2={10,"赶上村"};  
        Information _I3={44,"震需要"};  
        SchoolNo _No1={3};  
        SchoolNo _No2={1};  
        SchoolNo _No3={2};  
        a.Insert(_No1,_I1);  
        a.Insert(_No2,_I2);  
        a.Insert(_No3,_I3);  
        a.view();  
        a.Remove(_No2,_I2);  
        a.view();  
        return 0;  
    }  

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读