鏈表C++模版
来源:互联网 发布:彩票合买大厅源码 编辑:程序博客网 时间:2024/05/22 14:23
template <typename Type>class LinkList {private:Type data;LinkList* next;public:LinkList(){data=0;next=NULL;}LinkList <Type> ( const LinkList<Type> & RightSides );LinkList <Type>* get_headptr( ) const;void create_linklist( LinkList <Type>* &L );void output_element( LinkList <Type>* &L ) const;void find_element( LinkList <Type>* &L, Type C ) const;bool insert_element( LinkList <Type>* &L, int n, Type C );bool delete_element( LinkList <Type>* &L, int n );void destroy_linklist( LinkList <Type>* &L );LinkList <Type>* reverse_list( LinkList <Type>* &L );//~LinkList<Type> ()//{//next->destroy_linklist( next );//}};template <typename Type>LinkList<Type>:: LinkList ( const LinkList<Type> & RightSides )//复制构造函数 注意:深拷贝(new,指针方向) 还有next{cout<<"copy:*********************************"<<endl;next = new LinkList<Type>;next->data = RightSides.data;//复制第一个节点LinkList<Type>* rightsidesptr = new LinkList<Type>;rightsidesptr = RightSides.next;LinkList<Type>* newone =new LinkList<Type>;next->next = newone;if ( rightsidesptr == NULL ){next->next = NULL;delete newone;}LinkList<Type>* saver =new LinkList<Type>;while ( rightsidesptr != NULL ){newone->data = rightsidesptr->data;saver = newone;newone->next = new LinkList<Type>;newone = newone->next ;rightsidesptr = rightsidesptr->next;}saver->next = NULL;delete newone;}template <typename Type>LinkList <Type>* LinkList<Type>::get_headptr( ) const{return next;}template <typename Type>void LinkList<Type>::create_linklist( LinkList <Type>* &L ){std::cout<<"input elements ctrl+f end"<<std::endl;Type a;LinkList<Type> *Node = L;LinkList<Type> *saver;while ( std::cin>>a ){saver=Node;Node->data=a;LinkList<Type> *temp=new LinkList<Type>;Node->next=temp;Node=temp;}saver->next=NULL;}template <typename Type>void LinkList<Type>::output_element( LinkList <Type>* &L ) const{if( L==NULL )cout<<"空表"<<endl;LinkList <Type> *temp=L;while ( temp != NULL ) {cout<<temp->data<<" ";temp=temp->next;}cout<<endl;}template <typename Type>void LinkList<Type>::find_element( LinkList <Type>* &L, Type C ) const{LinkList <Type> *temp=L;bool flag=0;for ( int i=1; temp!=NULL; temp=temp->next, i++ ){if ( temp->data==C ){cout<<i<<" ";flag=1;}}if ( flag==0 ){cout<<"can't find "<<C<<endl;}}template <typename Type>bool LinkList<Type>::insert_element( LinkList <Type>* &L, int n, Type C ) {if ( n<0 )cout<<"插入错误,位置不存在"<<endl;if ( n==0 ){LinkList <Type> *insert_one=new LinkList <Type>;insert_one->data=C;insert_one->next=L;L=insert_one;return true;}LinkList <Type> *temp=L;for ( int i=0; i<n-1; i++){if ( temp->next==NULL ){cout<<"插入错误,超出位置。"<<endl;return false;}elsetemp=temp->next;}LinkList <Type> *insert_one=new LinkList <Type>;insert_one->next=temp->next;insert_one->data=C;temp->next=insert_one;return true;}template <typename Type>LinkList <Type>* LinkList<Type>::reverse_list( LinkList <Type>* &L ){if ( L->next ==NULL )//一个结点的情况return L;LinkList <Type> *q=new LinkList <Type>;LinkList <Type> *o=new LinkList <Type>;q=L->next;o=q->next;L->next=NULL;while( o!=NULL && o->next != NULL ){q->next=L;L=q;q=o;o=o->next;}q->next=L;if ( o!=NULL )//两个以上结点的情况,处理o{o->next=q;return o;}elsereturn q;//两个结点的情况}template <typename Type>bool LinkList<Type>::delete_element( LinkList <Type>* &L, int n ){LinkList <Type> *temp=L;if ( n==1 ){if ( L->next==NULL ){L=NULL;}else{L=L->next;delete temp;}return true;}for ( int i=0; i<n-2 ; i++){if ( temp->next==NULL || temp->next->next==NULL ){cout<<"删除错误,超出位置。"<<endl;return false;}temp=temp->next;}if ( temp->next==NULL || temp->next->next==NULL ){cout<<"删除错误,超出位置。"<<endl;return false;}LinkList <Type> *deleteone=temp->next;temp->next=temp->next->next;delete deleteone;return true;}template <typename Type>void LinkList<Type>::destroy_linklist( LinkList <Type>* &L ){while( L!= NULL ){LinkList <Type>* temp = L;L = L->next;delete temp;}}//////测试////#include <iostream>//#include "LinkList.h" //using namespace std;//int main()//{//// LinkList<int> L1;//LinkList<int> *L=new LinkList<int>;//// L = & L1;//L->create_linklist( L );//L->output_element( L );//L->find_element( L, 10000 );//cout<<endl;//L->insert_element( L, 5, 10000 );//cout<<"*****插入后********"<<endl;//L->output_element( L );//L=L->reverse_list( L );//cout<<"******倒转后*******"<<endl;//L->output_element( L );//cout<<"******删除后*******"<<endl;//L->delete_element( L, 1 );//L->output_element( L );//cout<<"*****插入后********"<<endl;//L->insert_element( L, 0, 10000 );//L->output_element( L );//L=L->reverse_list( L );//cout<<"******新链接表开始构造*******"<<endl;////LinkList<int> newone( *L );//LinkList<int> *P=new LinkList<int>;//P= newone.get_headptr(); //L->destroy_linklist( L );//L->output_element( L );//P->output_element( P );//P->find_element( P, 10000 ); ////LinkList<int> newtwo( *P );//P->destroy_linklist( P );//P->output_element( P );//LinkList<int> *Q=new LinkList<int>;//Q= newtwo.get_headptr(); //Q->output_element( Q );//cout<<endl;//system("pause");//return 0;//}
0 0
- c语言图形模版
- 用C也能写模版
- 模版文件 target.c
- 邻接表模版c+
- Template模版实例(C++)
- 【C++】模版矩阵类
- C++template--函数模版
- 【c++】函数模版
- c++模版
- 【C++】认识模版函数
- C/C++模版
- C++——模版:函数模版
- C++——模版:类模版
- [C++] 模版双向鍊表
- 高精度运算模版C语言
- 简单理解 C ++ 中的模版
- [C++]模版特例化和模版偏特化
- 【C/C++】C++模版基础知识点
- 面试题
- c实现字符串消除
- 动态规划之最长公共子序列(LCS)
- 打印十字图
- 【TCP】s.shutdownOutput();这行代码的牛逼之处
- 鏈表C++模版
- centos6.3安装subversion仓库
- Android开发环境搭建-eclipse+ADT及hello world
- DAO
- HTML_JavaScript基础入门
- HDU 1542 Atlantis (离散化+扫描线)
- 多线程之二:创建一个多线程管理器(Creating a manager for Multiple Threads)
- Spring整合MyBatis
- org.apache.jasper.JasperException: Unable to compile class for JSP的解决方案