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】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |