c语言课程设计非链表
1. 关于c语言课程设计链表的两个问题。。(高分求助) 非常急。。。。!!。
#include <iostream>
using namespace std;
struct NODE
{
int data;
NODE *next;
};
void dataAdd(NODE *(&list),int data) //在链表尾增加一个新的节点
{
NODE *newNode,*p;
newNode=new NODE;
newNode->data=data;
p=list;
if(!p) //如果list为空,头结点赋值为当前值
{
list=newNode;
list->next=NULL;
return ;
}
while(p->next)
{
p=p->next;
}
p->next=newNode;
newNode->next=NULL;
}
void inputData(NODE *(&list))
{
int data;
cin>>data;
while(!cin.fail())
{
dataAdd(list,data);
cin>>data;
}
cin.clear();
cin.sync();
}
int lastData(NODE *list)
{
NODE *p=list;
if(!p)
{
return -1;
}
while(p->next)
{
p=p->next;
}
return p->data;
}
void sortList(NODE *(&list))
{
NODE *p,*q;
p=list;
int temp;
while(p->next)
{
q=p->next;
while(q)
{
if(p->data>q->data)
{
temp=p->data;
p->data=q->data;
q->data=temp;
}
q=q->next;
}
p=p->next;
}
}
void combination(NODE *list1,NODE *list2,NODE *(&list3))
{
NODE *p=list1;
NODE *q=list2;
while(p && q)
{
if(p->data < q->data )
{
if(lastData(list3)!=p->data)
dataAdd(list3,p->data);
p=p->next;
}
else if(p->data > q->data)
{
if(lastData(list3)!=q->data)
dataAdd(list3,q->data);
q=q->next;
}
else if(p->data == q->data)
{
if(lastData(list3)!=p->data)
dataAdd(list3,p->data);
p=p->next;
q=q->next;
}
}
while(p)
{
if(lastData(list3)!=p->data)
dataAdd(list3,p->data);
p=p->next;
}
while(q)
{
if(lastData(list3)!=q->data)
dataAdd(list3,q->data);
q=q->next;
}
}
void showList(NODE *list) //显示链表中的数据
{
NODE *p;
p=list;
while(p)
{
cout<<p->data<<' ';
p=p->next;
}
cout<<endl;
}
int main()
{
NODE *list1=NULL,*list2=NULL;
cout<<"请输入链表1的数据,非数字字符为结束符!"<<endl;
inputData(list1);
sortList(list1); //list1排序
//showList(list1);
cout<<endl;
cout<<"请输入链表2的数据,非数字字符为结束符!"<<endl;
inputData(list2);
sortList(list2); //list2排序
NODE *list3=NULL;
cout<<"list1和list2的并集为:"<<endl;
combination(list1,list2,list3);
showList(list3);
cout<<endl;
return 0;
}