线性表基本类的实现

  1 #include<iostream>//本线性表的last为个数,例如last为5,线性表值从0-4
  2 #include<cstdlib>
  3 
  4 const int defaultsize = 100;
  5 
  6 using namespace std;
  7 
  8 template<class T>
  9 class SeqList
 10 {
 11 protected:
 12 
 13         T *data;
 14         int maxSize;
 15         int last;
 16         void reSize(int newSize);//增大线性表的空间
 17 
 18 public:
 19         SeqList(int sz = defaultsize);
 20         SeqList(SeqList<T>& L);
 21         ~SeqList(){delete[] data;}
 22         int size()const{return maxSize;}
 23         int Length()const{return last+1;}
 24         int search(T& x)const;
 25         int Locate(int i)const;
 26         bool getData(int i,T& x)const
 27         {
 28             if(i>0&&i<=last+1)
 29                 {
 30                         x=data[i-1];
 31                         return true;
 32                 }
 33           else
 34             return false;
 35         }
 36         void setData(int i,T& x)const
 37         {
 38             if(i>0&&i<=last+1)
 39             data[i-1]=x;
 40         }
 41        bool Insert(int i,T& x);
 42        bool Remove(int i,T& x);
 43        bool IsEmpty()
 44        {
 45            return (last ==-1)?true:false;
 46 
 47        }
 48        bool IsFull()
 49        {
 50          return(last==-1)?true:false;
 51 
 52        }
 53        void input();
 54        void output();
 55        SeqList<T>operator=(SeqList<T>& L);
 56        friend void deletemin(SeqList<int>& s);
 57 
 58 };
 59 template<class T>
 60 void SeqList<T>::reSize(int newSize)
 61 {
 62       if(newSize!=maxSize)
 63     {
 64         T *newarray = new T[newSize];
 65             if(newarray ==NULL)
 66         {
 67             //cerr<<"内存分配错误!!"<<endl;
 68             exit(1);
 69         }
 70          int n=last+1;
 71          T*s =data;
 72          T*d=newarray;
 73          while(n--)
 74          {
 75              *d++=*s++;
 76          }
 77          delete []data;
 78          data=newarray;
 79          maxSize =newSize;
 80     }
 81 }
 82 template<class T>
 83 SeqList<T>::SeqList(int sz )
 84 {
 85 
 86     if(sz>0)
 87     {
 88         maxSize=sz;
 89         last=-1;
 90         data= new T[maxSize];
 91         if(data ==NULL)
 92         {
 93             //cerr<<"内存分配错误!!"<<endl;
 94             exit(1);
 95         }
 96     }
 97 
 98 }
 99 template<class  T>
100 SeqList<T>::SeqList(SeqList<T>& L)
101 {
102     maxSize=L.size();
103     last=L.length()-1;
104     data =new T[maxSize];
105     if(data ==NULL)
106     {
107         //cerr<<"内存分配错误!!"<<endl;
108         exit(1);
109     }
110      T value;
111      for(int i=1;i<=last+1;i++)
112      {
113          L.getData(i,value);
114          data[i-1]=value;
115      }
116 
117 }
118 template<class T>
119 int SeqList<T>::search(T& x)const
120  {
121      for(int i=0;i<=last;i++)
122      {
123          if(data[i]==x)
124          return i+1;
125          return 0;
126      }
127  }
128 template<class T>
129 int SeqList<T>::Locate(int i)const
130 {
131     if(i>=1&&i<=last+1)
132     return i;
133     else
134     return 0;
135 
136 }
137 template<class T>
138 bool SeqList<T>::Insert(int i,T& x)
139 {
140     if(last==maxSize-1)
141        return false;
142     if(i<0||i>last+1)
143       return false;
144     for(int j=last;j>=i;j--)
145     {
146         data[j+1]=data[j];
147     }
148     data[i]=x;
149     last++;
150     return true;
151 
152 }
153 template<class T>
154 bool SeqList<T>::Remove(int i,T& x)
155 {
156     if(last==-1)
157        return false;
158     if(i<0||i>last+1)
159       return false;
160     x=data[i];
161     for(int j=i+1;j<last;j++)
162     {
163         data[j-1]=data[j];
164     }
165 
166     last--;
167     return true;
168 }
169 template<class T>
170 void SeqList<T>::input()
171 {
172     while(1)
173         {
174                 cin>>last;
175                 if(last<=maxSize-1)
176                         break;
177 
178         }
179         for(int i=0;i<last;i++)
180               cin>>data[i];
181 }
182 template<class T>
183 void SeqList<T>::output()
184 {
185 
186     cout<<"{ " ;
187     for(int i=0;i<last;i++)
188     cout<<data[i]<<" ";
189     cout<<"}";
190 
191 }
192 template<class T>
193 SeqList<T> SeqList<T>::operator=(SeqList<T>& L)
194 {
195     return *this;
196 }
197 ///////////////////////////////////////////////////////////////////////

#include<iostream>//本线性表的last为个数,例如last为5,线性表值从0-4
#include<cstdlib>

const int defaultsize = 100;

using namespace std;

template<class T>
class SeqList
{
protected:

T *data;
int maxSize;
int last;
void reSize(int newSize);

public:
SeqList(int sz = defaultsize);
SeqList(SeqList<T>& L);
~SeqList(){delete[] data;}
int size()const{return maxSize;}
int Length()const{return last+1;}
int search(T& x)const;
int Locate(int i)const;
bool getData(int i,T& x)const
{
if(i>0&&i<=last+1)
{
x=data[i-1];
return true;
}
else
return false;
}
void setData(int i,T& x)const
{
if(i>0&&i<=last+1)
data[i-1]=x;
}
bool Insert(int i,T& x);
bool Remove(int i,T& x);
bool IsEmpty()
{
return (last ==-1)?true:false;

}
bool IsFull()
{
return(last==-1)?true:false;

}
void input();
void output();
SeqList<T>operator=(SeqList<T>& L);
friend void deletemin(SeqList<int>& s);

};
template<class T>
void SeqList<T>::reSize(int newSize)
{
if(newSize!=maxSize)
{
T *newarray = new T[newSize];
if(newarray ==NULL)
{
//cerr<<"内存分配错误!!"<<endl;
exit(1);
}
int n=last+1;
T*s =data;
T*d=newarray;
while(n--)
{
*d++=*s++;
}
delete []data;
data=newarray;
maxSize =newSize;
}
}
template<class T>
SeqList<T>::SeqList(int sz )
{

if(sz>0)
{
maxSize=sz;
last=-1;
data= new T[maxSize];
if(data ==NULL)
{
//cerr<<"内存分配错误!!"<<endl;
exit(1);
}
}

}
template<class T>
SeqList<T>::SeqList(SeqList<T>& L)
{
maxSize=L.size();
last=L.length()-1;
data =new T[maxSize];
if(data ==NULL)
{
//cerr<<"内存分配错误!!"<<endl;
exit(1);
}
T value;
for(int i=1;i<=last+1;i++)
{
L.getData(i,value);
data[i-1]=value;
}

}
template<class T>
int SeqList<T>::search(T& x)const
{
for(int i=0;i<=last;i++)
{
if(data[i]==x)
return i+1;
return 0;
}
}
template<class T>
int SeqList<T>::Locate(int i)const
{
if(i>=1&&i<=last+1)
return i;
else
return 0;

}
template<class T>
bool SeqList<T>::Insert(int i,T& x)
{
if(last==maxSize-1)
return false;
if(i<0||i>last+1)
return false;
for(int j=last;j>=i;j--)
{
data[j+1]=data[j];
}
data[i]=x;
last++;
return true;

}
template<class T>
bool SeqList<T>::Remove(int i,T& x)
{
if(last==-1)
return false;
if(i<0||i>last+1)
return false;
x=data[i];
for(int j=i+1;j<last;j++)
{
data[j-1]=data[j];
}

last--;
return true;
}
template<class T>
void SeqList<T>::input()
{
while(1)
{
cin>>last;
if(last<=maxSize-1)
break;

}
for(int i=0;i<last;i++)
cin>>data[i];
}
template<class T>
void SeqList<T>::output()
{

cout<<"{ " ;
for(int i=0;i<last;i++)
cout<<data[i]<<" ";
cout<<"}";

}
template<class T>
SeqList<T> SeqList<T>::operator=(SeqList<T>& L)
{
return *this;
}
////////////////////////////////////////////////////////////////////////////////////////////////////

以上线性表的maxSize为线性表的大小,而last是线性表中有值的个数

原文地址:https://www.cnblogs.com/Peit/p/5880330.html