线性表的尝试,出错了,谁帮我看下,谢谢
#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 add
private:
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;
}
第一步,先挨个对照一下发现自己的语法错误在哪里?我基本都通过注释标注了。
第二步,尝试修改源代码,先写好构造函数,然后创建链表-->这时候可以通过打印链表看看正确与否,这是很重要。然后再考虑删除链表、插入链表、合并链表等的操作。
第三步,再对照书本去理解概念。
可以参考我的博客里有详细讲解:http://blog.csdn.net/wojiushiwo987/article/details/7858469
希望对你有帮助,可以继续提问,一起探讨!