单链表
2015-11-04 22:49
155 查看
#include<iostream> using namespace std; template<class DataType> struct Node { DataType data; Node<DataType>*next; }; template<class DataType> class LinkList { public: LinkList(); LinkList(DataType a[],int n); ~LinkList(); int Locate(DataType x); void Insert(int i,DataType x); DataType Delete(int i); void PrintList(); private : Node<DataType>*first; }; template<class DataType> LinkList<DataType>::LinkList() { first=new Node<DataType>; first->next=NULL; } template<class DataType> LinkList<DataType>::LinkList(DataType a[],int n) { Node<DataType>*r,*s; first=new Node<DataType>; r=first; for(int i=0;i<n;i++) { s=new Node<DataType>; s->data=a[i]; r->next=s;r=s; } r->next=NULL; } template<class DataType> LinkList<DataType>::~LinkList() { Node<DataType>*q=NULL; while(first!=NULL) { q=first; first=first->next; delete q; } } template<class DataType> void LinkList<DataType>::Insert(int i,DataType x) { Node<DataType>*p=first,*s=NULL; int count=0; while(p!=NULL&&count<i-1) { p=p->next; count++; } if(p==NULL)throw"位置"; else{ s=new Node<DataType>;s->data=x; s->next=p->next;p->next=s; } } template<class DataType> DataType LinkList<DataType>::Delete(int i) { Node<DataType>*p=first,*q=NULL; DataType x; int count=0; while(p!=NULL&&count<i-1) { p=p->next; count++; } if(p==NULL||p->next==NULL) throw"位置"; else{ q=p->next;x=q->data; p->next=q->next; delete q; return x; } } template<class DataType> int LinkList<DataType>::Locate(DataType x) { Node<DataType>*p=first->next; int count=1; while(p!=NULL) { if(p->data==x)return count; p=p->next; count++; } return 0; } template<class DataType> void LinkList<DataType>::PrintList() { Node<DataType>*p=first->next; while(p!=NULL) { cout<<p->data<<" "; p=p->next; } cout<<endl; } void main() { int r[5]={1,2,3,4,5}; LinkList<int>L(r,5); cout<<"执行插入操作前数据为:"<<endl; L.Insert(2,3); try { L.Insert(2,3); } catch(char*s) { cout<<s<<endl; } cout<<"执行插入操作后数据为:"<<endl; L.PrintList(); cout<<"值为5的元素位置为:"; cout<<L.Locate(5)<<endl; cout<<"执行删除操作前数据为:"<<endl; L.PrintList(); try { L.Delete(1); } catch(char*s) { cout<<s<<endl; } cout<<"执行删除操作后数据为:"<<endl; L.PrintList(); }
相关文章推荐
- 【JDK源码】JDK/ArrayList源码逐行详解
- 算法-朴素字符串匹配
- MenuItem的setAsAction四种属性解析
- 1104 文法产生这段C程序的推导过程
- Chapter 12 Exercises & Problems
- 设置Ubuntu环境变量 PATH 的方法 及配置备份
- C++primer学习:模板编程(6):模板实参推断和forward的运用与源代码
- 快学Scala 读书笔记之 Chapter 2、3、4(控制结构函数,数组,映射,元组)
- [TwistedFate] NSDate NSDateFormatter
- Android总结——Android四大控件
- [leetcode 9] Palindrome Number
- Hadoop之HDFS的API实现
- mecache安装与php_memcache.dll扩展
- Linux 的man page/info page
- IDEA如何打包可运行jar的一个问题
- 双摄像头立体成像(一)-成像原理
- Jsoup获取全国地区数据(省市县镇村)(续) 纯干货分享
- 黑马程序员----反射
- 页面ajax提交,控制器php处理
- demo1