- 实验作业
1.调试分析课本每一个例题,有可能的话更改成2-3个方法的新程序;
插入结点到链表中
student *insert(student *head,student *stud)
{
student *p0,*p1,
8p2;
p1=head;
p0=stud;
if(head==NULL)
{
head=po;
po->next=NULL;
}
else
while((p0->num>p1->num)&&(pi->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num<=p1->num)
{
if(head==p1)
head=p0;
else
p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
n++;
return head;
}
2.编程实现课本每一个编程习题。
#include<iostream>
using namespace std;
struct student
{
int num;
char name[20];
float class1;
float class2;
float class3;
}stu1;
int main()
{
cout<<"输入学号,姓名,英语成绩,数学成绩,语文成绩"<<endl;
cin>>stu1.num>>stu1.name>>stu1.class1>>stu1.class2>>stu1.class3;
cout<<stu1.num<<stu1.name<<stu1.class1<<stu1.class2<<stu1.class3<<endl;
return 0;
}
3. 建立一个链表,每一个学号包括学号、姓名、性别、成绩,输入一个成绩,如果在链表中节点成绩等入输入的成绩,则将其删除。
#include<iostream>
using namespace std;
struct student //***********
{
int num; //***********
char name[20]; //***********
char sex; //***********
float score; //***********
student *next;
};
int n=0;
student *creat()//***********新建链表
{
student *head,*p1,*p2;
head=NULL;
p1=new(student);
p2=p1;
cout<<"请输入学生的学号、姓名、性别(m/w)、成绩,当学号为0时,停止输入:"<<endl; //***********
cin>>p1->num>>p1->name>>p1->sex>>p1->score; //***********
while(p1->num!=0)
{
n++;
if(n==1)
head=p1;
else
{
p2->next=p1;
p2=p1;
}
p1=new(student);
cin>>p1->num>>p1->name>>p1->sex>>p1->score; //***********
}
delete p1;
p2->next=NULL;
return head;
}
void print(student *head) //***********输出链表
{
student *p;
p=head;
if(p==NULL)return;
do
{
cout<<p->num<<" "<<p->name<<" "<<p->sex<<" "<<p->score<<endl; //***********
p=p->next;
}while(p!=NULL);
}
student *del(student *head,int score) //***********删除链表 score可改
{
student *p1,*p2;
if(head==NULL)
{
cout<<"list null"<<endl;
return head;
}
p1=head;
while(score!=p1->score&&p1->next!=NULL) //*********** score可改
{
p2=p1;
p1=p1->next;
}
if(score==p1->score) //*********** score可改
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
cout<<"delete:"<<score<<endl; //*********** score可改
n--;
}
else
cout<<score<<"not been found!"<<endl; //*********** score可改
return head;
}
int main()
{
student *head=creat();
cout<<"新建的链表为:"<<endl
<<"学号\t姓名\t性别\t成绩"<<endl;
print(head);
int score; //*******************
cout<<"请输入你要删除的成绩:";
cin>>score;
head=del(head,score);
cout<<"目前的链表为:"<<endl;
print(head);
return 0;
}
4.有两个链表,结点数据信息相同。将其合并成一个链表,节点数据不能重复。
#include<iostream>
using namespace std;
struct link
{
int num;
link *next;
};
void change(link *head1,link *head2);
link *creat1();
link *creat2();
void print(link *h);
link *del(link *head2,int num);
link *merger(link *head1,link *head2);
int main()
{
int m1=0,m2=0;
link *head1=creat1();
link *head2=creat2();
cout<<"Á´±í1Ϊ£º"<<endl;
print(head1);
cout<<"Á´±í2Ϊ£º"<<endl;
print(head2);
change(head1,head2);
cout<<"ɾ³ýºóÁ´±í2Ϊ£º"<<endl;
print(head2);
cout<<"ºÏ²¢ºóµÄÐÂÁ´±íΪ£º"<<endl;
print(head1);
return 0;
}
link *creat1()
{
int m=0;
link *head1,*p1,*p2;
head1=NULL;
p1=new(link);
p2=p1;
cout<<"ÇëÊäÈëÊý×Ö£¬ÒÔÊäÈë0½áÊø:"<<endl;
cin>>p1->num;
while(p1->num!=0)
{
m++;
if(m==1)
head1=p1;
else
{
p2->next=p1;
p2=p1;
}
p1=new(link);
cin>>p1->num;
}
delete p1;
p2->next=NULL;
return head1;
}
link *creat2()
{
int m=0;
link *head2,*q1,*q2;
head2=NULL;
q1=new(link);
q2=q1;
cout<<"ÇëÊäÈëÊý×Ö£¬ÒÔÊäÈë0½áÊø:"<<endl;
cin>>q1->num;
while(q1->num!=0)
{
m++;
if(m==1)
head2=q1;
else
{
q2->next=q1;
q2=q1;
}
q1=new(link);
cin>>q1->num;
}
delete q1;
q2->next=NULL;
return head2;
}
void print(link *h)
{
link *p;
p=h;
if(p==NULL)return;
do
{
cout<<p->num<<endl;
p=p->next;
}while(p!=NULL);
}
void change(link *head1,link *head2)
{
link *p;
p=head1;
if(p==NULL)return;
do
{ p->num;
del(head2,p->num);
p=p->next;
}while(p!=NULL);
merger(head1,head2);
}
link *del(link *head2,int num)
{
link *q1,*q2;
if(head2==NULL)
{
return head2;
}
q1=head2;
while(num!=q1->num&&q1->next!=NULL)
{
q2=q1;
q1=q1->next;
}
if(num==q1->num)
{
if(q1==head2)
head2=q1->next;
else
q2->next=q1->next;
}
else
;
return head2;
}
link *merger(link *head1,link *head2)
{
link *p1;
if(head1==NULL||head2==NULL)return NULL;
p1=head1;
while(p1->next!=NULL)
{
p1=p1->next;
}
p1->next=head2;
return head1;
}