无头结点单链表法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include
using namespace std;
template
struct Node
{
T data;
Node * next;
};
template
class linklist
{
private:
Node *first;
public:
linklist(T a[],int n);
~linklist();
T Get(int i);
int length();
friend linklist Add(linklist A,linklist B);
template
friend ostream & operator<<(ostream & os,linklist & A);
};
template
int linklist::length()
{
Node * p=first->next;
int count=1;
while(p!=NULL)
{
p=p->next;
count++;
}
return count;
}
template
ostream & operator<<(ostream & os,linklist & A)
{
cout<Node * p=A.first;
while(p!=NULL)
{
os<data;
p=p->next;
}
return os;
}
template
linklist::~linklist()
{
Node * p=first;
Node * q;
while(p!=NULL)
{
q=p;
p=p->next;
delete q;
}
}
template
linklist::linklist(T a[],int n)
{
first=new Node ;
Node * p=first,*s;
first->data=a[0];
for(int i=1;i{
s=new Node;
s->data=a[i];
p->next=s;
p=s;
}
p->next=NULL;
}
template
T linklist::Get(int i)
{
Node * p=first;
int count=0;
while(p!=NULL && count{
p=p->next;
count++;
}
return p->data;
}
linklist Add(linklist A,linklist B)
{
cout<Node * k1=A.first;
Node * k2=B.first;
int flag=0,i=0;
int n=A.length(),m=B.length();
if(n>m)
{
Node * q=A.first;
for(;i{
q->data=(A.Get(i+1)+B.Get(i+1)+flag)%8;
flag=(A.Get(i+1)+B.Get(i+1)+flag)/8;
q=q->next;
}
for(i=m;i{
q->data=(A.Get(i+1)+flag)%8;
flag=(A.Get(i+1)+flag)/8;
q=q->next;
}
q->data=(A.Get(n)+flag)%8;
flag=(A.Get(n)+flag)/8;
if(flag==1)
{
Node * s=new Node;
s->data=1;
s->next=q->next;
q->next=s;
}
return A;
}
else
{
Node * q=B.first;
for(i=0;i{
q->data=(A.Get(i+1)+B.Get(i+1)+flag)%8;
flag=(A.Get(i+1)+B.Get(i+1)+flag)/8;
q=q->next;
}
for(;i{
q->data=(A.Get(i+1)+flag)%8;
flag=(A.Get(i+1)+flag)/8;
q=q->next;
}
if(flag==1)
{
Node * s=new Node;
s->data=1;
s->next=q->next;
q->next=s;
}
return B;
}
}
int main()
{
int a[2]={1,1};
int b[1]={1};
linklist A(a,2);
linklist B(b,1);
cout<cout<}

相关文档
最新文档