a->find(1,3);⼀⼀注释掉这行时,错误是 warning C4700: 使用了未初始化的局部变量“a”,而且运行被终止!!

2024-12-31 12:45:16
推荐回答(1个)
回答1:

#include
using namespace std;

template
class linearlist
{
public:
virtual bool isempty() const=0;//纯虚函数
virtual int length() const=0;
virtual bool find(int i,T x) const=0;
virtual int search(T x) const=0;
virtual bool insert(int i,T x)=0;
virtual bool Delete(int i)=0;
virtual bool update(int i,T x)=0;
virtual void output(ostream & out)const=0;
protected:
int n;
}; //虚基类

template //提前声明
class singlelist;

template//结点类
class node
{
T element;
node*link;
friend class singlelist; //前面已经声明
};
template//单链表实现
class singlelist:public linearlist
{
public:
singlelist(){first=NULL;n=0;}
~singlelist();
bool isempty()const;
int length()const;
bool find(int i,T x)const;
int search(T x)const;
bool insert(int i,T x);
bool Delete(int i);
bool update(int i,T x);
//void clear();
void output(ostream& out)const;
private:
node* first;
};
// member fuction
template
singlelist::~singlelist()
{
node*p;
while(first)
{
p=first->link;
delete first;
first=p;
}
}

template
int singlelist::length() const
{
return n;
}

template
bool singlelist::isempty()const
{
return n==0;
}

template
bool singlelist::find(int i, T x) const//find the a[i]
{
if(i<0||i>n-1)
{
cout<<"out of bounds";
return false;
}
node* p=first;
for(int j=-1;j {
if(p->element==x)
return true;
p=p->link; //p->a[i]
}
return false;
}

template
int singlelist::search(T x) const
{
int j;
node* p=first;
for(j=0;p&&p->element!=x;j++)
p=p->link;
if(p)
return j;
return -1;
}

template
bool singlelist::insert(int i, T x)
{
if(i<-1||i>n-1)
{
cout<<"out of bounds";
return false;
}
node* q=new node;
q->element=x;
node*p=first;
for(int j=0;j p=p->link;
if(i>-1)
{
q->link=p->link;
p->link=q;
}
else
{
q->link=first;
first=q;
}
n++;
return true;
}

template
bool singlelist::Delete(int i)
{
if(!n)
{
cout<<"underflow"< return false;
}
if(i<0||i>n-1)
{
cout<<"out of bounds"< return false;
}
node*p=first,*q=first;
for(int j=0;j q=q->link;
if(i==0)
first=first->link;
else
{
p=q->link;
q->link=p->link;
}
delete p;
n--;
return true;
}

template
bool singlelist::update(int i,T x)
{
if(i<0||i>n-1)
{
cout<<"out of bounds"< return false;
}
node*p=first;
for(int j=0;j p=p->link;
p->element=x;return true;
}

template
void singlelist::output(ostream& out)const
{
node*p=first;
while(p)
{
out<element<<" ";
p=p->link;
}
out<}

//主函数
int main()
{
int ret;
singlelist *a=new singlelist();

(*a).insert(-1,2);

ret=a->find(0,2);//存在时提示 不能将参数 2 从“int”转换为“int &”

cout<
a->output(cout);

return 0;
}
修改1:纯虚函数在派生类singlelist中实现的修改,包括函数参数不同修改回来了
修改2:singlelist *a=new singlelist();初始化一下

其他的没仔细看,呵呵