[关闭]
@Lin-- 2018-09-12T03:53:41.000000Z 字数 1943 阅读 277

线性表

数据结构


  1. //头文件
  2. #ifndef LinearList
  3. //enum bool {false,true};
  4. template<class T>
  5. class LinearList{
  6. public:
  7. LinearList();
  8. ~LinearList();
  9. virtual int Size()const=0;
  10. virtual int Length()const=0;
  11. virtual int Locate(int i)const=0;
  12. virtual bool getData(int i,T &x)const=0;
  13. virtual void setData(int i,T &x)=0;
  14. virtual bool Insert(int i,T &x)=0;
  15. virtual bool Remove(int i,T &x)=0;
  16. virtual bool IsEmpty()const=0;
  17. virtual IsFull()const=0;
  18. virtual void Sort()=0;
  19. virtual void input()=0;
  20. virtual void output()=0;
  21. virtual LinearList<T>operator=(LinearList<T>&L)=0;
  22. }
  23. #endif
  1. //源文件
  2. #include<iostream.h>
  3. #include<stdlib.h>
  4. #include"LinearList.h"
  5. const int defaultSize=100;
  6. template<class T>
  7. class SeqList:public LinearList<T>{
  8. protected:
  9. T *data;
  10. int maxSize;
  11. int last;
  12. void reSize(int newSize);
  13. public:
  14. SeqList(int sz=defaultSize);
  15. SeqList(SeqList<T>&L);
  16. ~SeqList(){delete[]data;}\
  17. int Size()const{return maxSize;}
  18. int Length()const{return last+1;}
  19. int Search(T& x)const;
  20. int Locate(int i)const;
  21. bool getData(int i,T &x)const
  22. {if(i>0&&i<=last+1) {x=data[i-1];return true;} else return false;}
  23. bool setData(int i,T &x)
  24. {if(i>0&&i<=last+1)data[i-1]=x;}
  25. bool IsEmpty(){return (last==-1)?true:false;}
  26. bool IsFull(){return (last==maxSize-1)?true:false;}
  27. void input()i
  28. void output()i
  29. SeqList<T>operator=(SeqList<T>&L);
  30. }
  31. template<class T>
  32. SeqList<T>::SeqList(int sz){
  33. if(sz=0){
  34. maxSize=sz;last=-1;
  35. data=new T[maxSize];
  36. if(data==NULL)
  37. {cerr<<"存储分配错误!"<<endl;exit(1);}
  38. }
  39. }
  40. template<classT>
  41. SeqList<T>::SeqList(SeqList<T>&L){
  42. maxSize=L.Size();last=L.Length()-1;T value;
  43. data=new T[maxSize];
  44. if(data==NULL)
  45. {cerr<<"存储分配错误!"<<endl;exit(1);}
  46. for(int i=1;i<=last+1;i++)
  47. {L.getData(i,value);data[i-1]=value;}
  48. }
  49. template<class T>
  50. void SeqList<T>::reSize(int newSize){
  51. if(newSize<=0)
  52. {cerr<<"无效的数组大小"<<endl;return;}
  53. if(newSize!=maxSize){
  54. T *newarray=new T[newSize];
  55. if(newarray==NULL)
  56. {cerr<<"存储分配错误!"<<endl;exit(1);}
  57. int n=last+1;
  58. T *srcptr=data;
  59. T *destptr=newarray;
  60. while(n--)*destptr++=*srcptr++;
  61. delete[]data;
  62. data=newarray;maxSize=newSize;
  63. }
  64. }
  65. template<class T>
  66. int SeqList<T>::Search(T &x)const{
  67. for(int i=0;i<=last;i++)
  68. if(data[i]==x)return i+1;
  69. return 0;
  70. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注