下面是数据结构VC++6.0的程序,求每句的详解

#include<iostream>
using namespace std;
struct Node
{
int data;
Node *next;
};

Node * intLinkListLa(int n)
{ Node *head,*r;
head=new Node; //分配空间
head->next=NULL;
r=head;
for(int i=n;i>0;i--) //为链表添加数据
{
Node *s;
s=new Node;
int a;
cin>>a;
s->data=a;
s->next=r->next;
r->next=s;
r=s;
}
return head;

}

void Jiaoji(Node *La, Node *Lb)
{
Node *p, *q,*r;
p=La->next; q=Lb->next; r=La;//将r定义为头指针
while(p)
{

while(q)
{
if(p->data==q->data)
{

r->next=p;
r=p;

break;

}

q=q->next;

}
q=Lb->next; //每次循环后q指针都返回第一个元素的指针域
p=p->next; //p指向下一个元素

}

r->next=NULL;

}

void PrintList(Node *La) //遍历输出
{
Node *p;
p=La->next; //每次搜索都从头指针开始
while(p)
{
cout<<p->data<<"\t";
p=p->next;
}
}

int main()
{
int x,y;
cout<<"请输入集合一的个数"<<endl;
cin>>x;
Node*La=intLinkListLa(x);
cout<<"请输入集合二的个数"<<endl;
cin>>y;
Node*Lb=intLinkListLa(y);
Jiaoji(La, Lb);
PrintList(La);
return 0;
}
《数据结构》实验
实验一 集合的交、并和差运算的实现
实验性质:设计性实验
要求:(1)采用单链表的存储结构;
(2)实现运算时,不另外申请存储空间。(这是实验题目)

链表知识。画个图就行了。
Node * intLinkListLa(int n)
作用:初始化一个具有n个元素的链表 ,(int要改成init,这样别人一看函数名就知什么功能了)
输入n 个元素,作为结点的内容,串成一串。返回头结点指针head。
head
口 -> 口->....->口-> 口
1 n-1 n

改进做法:头结点中,data内容最好赋值为n,这样以后使用时,这个链表有多少结点元素就清楚了。

void Jiaoji(Node *La, Node *Lb)
作用:按名字,应该是指两个链表对比,有一小段是相同的。
void为返回类型,函数的参数表中没有参数是作为输出的。
也没有全局变量在函数体里面,所以100%断定,这个函数功能作用为0。函数体的代码都在做无用功!

void PrintList(Node *La)
作用:打印链表中各结点的元素内容。
p=La->next; //每次搜索都从头指针开始
这个注释是错误的,应该这样讲,//取链表中第一个含元素的结点(非头结点)
-----------
int main()
{
int x,y;
cout<<"请输入集合一的个数"<<endl;
cin>>x;
Node*La=intLinkListLa(x);
cout<<"请输入集合二的个数"<<endl;
cin>>y;
Node*Lb=intLinkListLa(y);   //到这里为止,初始两个链表
Jiaoji(La, Lb);       //没用
PrintList(La);    //打印第一个链表的元素内容。
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-20
//单链表节点的结构体定义
struct Node
{
int data;
Node *next;
};
//定义一个含有n个节点的单链表,且为每个节点赋值
Node * intLinkListLa(int n)
{ Node *head,*r;
head=new Node; //分配头节点空间
head->next=NULL;
r=head;
for(int i=n;i>0;i--) //为链表添加数据
{
Node *s;
s=new Node; //为每个节点分配内存
int a;
cin>>a;
s->data=a; //将键盘输入的数据存储到节点s的数据彧
s->next=r->next;
r->next=s; //将节点s链入到单链表
r=s; //将指针r指向单链表的最后一个节点
}
return head; //返回单链表的头指针
}
//求两个链表的交集
void Jiaoji(Node *La, Node *Lb)
{
Node *p, *q,*r;
p=La->next; q=Lb->next; r=La;//将r定义为头指针
while(p)
{
while(q)
{
if(p->data==q->data)
{
r->next=p;
r=p;
break;
}
q=q->next;
}
q=Lb->next; //每次循环后q指针都返回第一个元素的指针域
p=p->next; //p指向下一个元素
}
r->next=NULL;
}
void PrintList(Node *La) //遍历输出
{
Node *p;
p=La->next; //每次搜索都从头指针开始
while(p)
{
cout<<p->data<<"\t";
p=p->next;
}
}
int main()
{
int x,y;
cout<<"请输入集合一的个数"<<endl;
cin>>x;
Node*La=intLinkListLa(x);
cout<<"请输入集合二的个数"<<endl;
cin>>y;
Node*Lb=intLinkListLa(y);
Jiaoji(La, Lb);
PrintList(La);
return 0;
}本回答被提问者采纳
相似回答