急急急!!!求高手帮忙解决!!! 60
已知指针la和lb分别指向两个无头结点的单链表中的首结点。请编写函数完成从表la中删除自第i个元素开始的共len个元素并将它们插入到表lb中第j个元素之后。【怎样修改完善...
已知指针la和lb分别指向两个无头结点的单链表中的首结点。请编写函数完成从表la中删除自第i个元素开始的共len个元素并将它们插入到表lb中第j个元素之后。
【怎样修改完善程序,并写好main函数,能运行】
#include<iostream>
#include <stdio.h>
using namespace std;
template<class T>
class ChainNode {
friend class Chain<T>; //报错就是从这里开始的,我估计是这个模板类的友元写错了
private:
T data;
int length;
ChainNode<T> *la;
ChainNode<T> *lb;
public:
class Chain : public AbstractList<T> {
public: //AbstractList是定义好的一个抽象类,表示顺序表
Chain() {first=0;length=0;}
~Chain();
bool isEmpty() const {return (first==0);}
int getLength() const {return length;}
bool find(int k,T &x) const;
int search(const T &x) const;
AbstractList<T>& deLete(int k,T &x);
AbstractList<T>& insert(int k,const T &x);
void output(ostream&out)const;
}
template<class T>
class Chain ::Status DeleteAndInsertSub(LinkList &la,LinkList &lb,int i,int j,int len)
{
public:
LinkList p,q,s,prev=NULL;
int k=1;
if(i<0||j<0||len<0) return INFEASIBLE;
// 在la表中查找第i个结点
p=la;
while(p&&k<i){
prev=p;
p=p->next;
k++;
}
if(!p)return INFEASIBLE;
// 在la表中查找第i+len-1个结点
q=p;k=1;
while(q&&k<len){
q=p->next;
k++;
}
if(!q)return INFEASIBLE;
// 完成删除,注意,i=1的情况需要特殊处理
if(!prev) la=q->next;
else prev->next=q->next;
// 将从la中删除的结点插入到lb中
if(j=1){
q->next=lb;
lb=p;
}
else{
s=lb;k=1;
while(s&&k<j-1){
s=s->next;
k++;
}
if(!s)return INFEASIBLE;
q->next=s->next;
s->next=p; //完成插入
}
return OK;
}
void main()
{
} 展开
【怎样修改完善程序,并写好main函数,能运行】
#include<iostream>
#include <stdio.h>
using namespace std;
template<class T>
class ChainNode {
friend class Chain<T>; //报错就是从这里开始的,我估计是这个模板类的友元写错了
private:
T data;
int length;
ChainNode<T> *la;
ChainNode<T> *lb;
public:
class Chain : public AbstractList<T> {
public: //AbstractList是定义好的一个抽象类,表示顺序表
Chain() {first=0;length=0;}
~Chain();
bool isEmpty() const {return (first==0);}
int getLength() const {return length;}
bool find(int k,T &x) const;
int search(const T &x) const;
AbstractList<T>& deLete(int k,T &x);
AbstractList<T>& insert(int k,const T &x);
void output(ostream&out)const;
}
template<class T>
class Chain ::Status DeleteAndInsertSub(LinkList &la,LinkList &lb,int i,int j,int len)
{
public:
LinkList p,q,s,prev=NULL;
int k=1;
if(i<0||j<0||len<0) return INFEASIBLE;
// 在la表中查找第i个结点
p=la;
while(p&&k<i){
prev=p;
p=p->next;
k++;
}
if(!p)return INFEASIBLE;
// 在la表中查找第i+len-1个结点
q=p;k=1;
while(q&&k<len){
q=p->next;
k++;
}
if(!q)return INFEASIBLE;
// 完成删除,注意,i=1的情况需要特殊处理
if(!prev) la=q->next;
else prev->next=q->next;
// 将从la中删除的结点插入到lb中
if(j=1){
q->next=lb;
lb=p;
}
else{
s=lb;k=1;
while(s&&k<j-1){
s=s->next;
k++;
}
if(!s)return INFEASIBLE;
q->next=s->next;
s->next=p; //完成插入
}
return OK;
}
void main()
{
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询