线性表的尝试,出错了,谁帮我看下,谢谢
#include<iostream>
using namespace std;
template <class T>
class SeqList{
public:
SeqList (int length=10);
void InitList (){last = -1;};
int InsetList (T x,int i);
int LocateList (T &x);
int Length(){return last+1;};
T Get(int i){return (i<0||i>last?NULL:data[i]);};
int DeleteList (T &x);
private:
int MaxSize;
int last;
T *data;
};
template <class T> int SeqList<T>::InsetList(T x,int i){
if(i<0 || i>last+1 || last = MaxSize-1) return 0;
else{
last++;
for(int j=last;j>i;j--) data[j]=data[i-1];
data[i]=x;
return 0;
}
}
template <class T> int SeqList<T>::LocateList (T &x){
int i=0;
while(i<last && data[i]!=x) i++;
if (i>last) return -1;
else return i;
}
template <class T> int SeqList<T>::DeleteList (T &x){
int i= LocateList (x);
if (i>=0){
last--;
for(int j=i;j<=last;j++) data[j]=data[j+1];
return 1;
}
}
template <typename T> void Union(SeqList<T> &LA,SeqList<T> &LB){
for(int i=0;i<9;i++){
int n=LA.Length();
T x=LB.Get(i);
int k = LA.LocateList (x);
if (k== -1){
LA.InsetList(x,n+1);n++;}
}
}
int main(){
SeqList<int> LA,LB;
int a=0;
int b=0;
cout<<"输入LA的数及其位置"<<endl;
cin>>a>>b;
while(b!=-1){
LA.InsetList(a,b);
};
cout<<"输入LB的数及其位置"<<endl;
cin>>a>>b;
while(b!=-1){
LB.InsetList(a,b);
};
Union(LA,LB);
system("pause");
return 0;
}
错误提示: E:\CPP\线性表.cpp In member function `int SeqList<T>::InsetList(T, int) [with T = int]':
60 E:\CPP\线性表.cpp instantiated from here
21 E:\CPP\线性表.cpp non-lvalue in assignment
[解决办法]
#include<iostream>using namespace std;template <class T>class SeqList{public: SeqList(int length=10); //构造函数写法错误! ~SeqList(); //以下几个函数不需要末尾的分号错啦! void InitList (){ last = -1; } int InsetList ( T x,int i); int LocateList (T &x); int Length(){ return last+1; } T Get(int i){ return ( i<0 || i>last ? NULL:data[i] ); } int DeleteList (T &x); void printList(); //new addprivate: int MaxSize; int last; T *data;};template <class T> SeqList<T>::SeqList(int length){ MaxSize = length; last = -1; data = (T*)malloc(MaxSize);} template <class T> SeqList<T>::~SeqList(){ if(data != NULL) { free(data); } data = NULL;} template <class T> int SeqList<T>::InsetList(T x,int i){ if(i<0 || i>MaxSize+1 || last == MaxSize-1) //此处是判断,不是赋值!注意两者的区别! return 0; else { last++; cout << "last =" << last << endl; for(int j=last;j>i;j--) { data[j]=data[j-1]; } data[i]=x; return 0; }}template <class T> int SeqList<T>::LocateList (T &x){ int i=0; while(i<last && data[i]!=x) { i++; } if (i>last) { return -1; } else { return i; }}template <class T> int SeqList<T>::DeleteList (T &x){ int i= LocateList (x); if (i>=0) { last--; for(int j=i;j<=last;j++) { data[j]=data[j+1]; } return 1; }}template <typename T> void SeqList<T>::printList(){}template <typename T> void Union(SeqList<T> &LA,SeqList<T> &LB) { for(int i=0;i<9;i++) { int n=LA.Length(); T x=LB.Get(i); int k = LA.LocateList (x); if (k== -1) { LA.InsetList(x,n+1); n++; } }}int main(){ SeqList<int> LA,LB; int a=0; int b=0; while(b!=-1) { cout<<"输入LA的数及其位置"<<endl; // b=-1代表结束. cin>>a>>b; LA.InsetList(a,b); }; LA.printList();// cout<<"输入LB的数及其位置"<<endl;// cin>>a>>b; // while(b!=-1)// { // cout<<"输入LB的数及其位置"<<endl; //b=-1代表结束// cin>>a>>b; // LB.InsetList(a,b);// };// // Union(LA,LB);// system("pause"); return 0;}