1、数据结构实训报告(常用版) (可以直接使用,可编辑 完整版资料,欢迎下载) 北京联合大学 实训报告 课程(项目)名称: 数据结构 学 院: 专 业: 班 级: 学 号: 姓 名: 成 绩: 2012年 6 月 21 日 数据结构实训任务一 一、任务与目的: 1、用顺序表表示两个无序集合A、B,实现集合的如下操作,求两个集合的并集、交集、差集。 2、 用顺序表表示两个集合A、B(集合A、B都是有序递增的情况)实现集合的如下操
2、作,求两个集合的并集、交集、差集。 3、用带头单链表存储结构表示两个无序集合A、B,实现集合的如下操作,求两个集合的并集、交集、差集。 4、用带头单链表存储结构表示两个集合A、B(集合A、B都是有序递增的情况),实现集合的如下操作,求两个集合的并集、交集、差集。 5、杀人游戏 N个人坐成一圈玩杀人游戏,按顺时针编号 1 2 3 N。从1号开始顺时针开始数到第m号就杀掉第一个人,被杀掉的人要退出游戏。 如果数到了编号的末尾,接着数开头的编号。 重复,直至杀掉一半人时,游戏结束,聪明的你能告诉我活到最后的幸存者最初的编号是多少吗? 输入数据:N、M ;输出数据:幸存者的
3、编号 分析该程序,如果N=20,M=2,……10。聪明的你应选择的编号是多少,(提示,计算出M分别等于1到10的情况下,那些编号生存概率较大)。给出实验结果 6、作业抽查问题:有35个学生的班级,由于某种原因不能够做到全部检查作业,现在希望每次抽查10名学生,希望能够随机抽查,并能够有记忆,即希望抽查过的学生,下次抽查的概率有所减小,但避免不被抽查。设计一个算法实现该功能,给出你的解释。 1. void BingSet(SqList A, SqList B,SqList &C) {//求并集 int i,j; int flag=0; C.length=0; for(i=
4、0;i 5、
{flag=LocateElem_Sq(A, B.elem[j]);
if(flag!=0)
{C.elem[i]=B.elem[j];i++;}
}
C.length=i;
}
void ChaSet(SqList A, SqList B,SqList &C)
{//求差集
int i,j,k;
int flag=0;
C.length=0;
k=0;
for(i=0;i 6、em[i];k++;}
}
C.length=k;
}
运行结果:
2. void BingSet(SqList A, SqList B,SqList &C)
{//求并集
int i,j,k;
k=0;
C.length=0;
for(i=0,j=0;(i 7、[i];k++;i++;j++;
}
else
{C.elem[k]=B.elem[j];k++;j++;}
}
}
if(i 8、{//求交集
int i,j,k;
k=0;
C.length=0;
for(i=0,j=0;(i 9、
int i,j,k;
int flag=0;
k=0;
C.length=0;
for(i=0,j=0;(i 10、lem[i];k++;i++;}
}
C.length=k;
}
void InserOrder_Sq(SqList &L,ElemType e)
{int i,j;
for(i=0;i 11、
{//求并集
link l,s,m;
int j=0,i=0;
q=new LNode;
q->date=NULL;
q->next=NULL;
s=p->next;
m=q;
while(s)
{l=new LNode;
l->date=s->date;
l->next=NULL;
s=s->next;
m->next=l;
m=l;
s=h->next;
while (s)
{i=s->date;
j=Locate(p,i);
if(j==0)
{l=new LNode 12、
l->date=s->date;
l->next=NULL;
m->next=l;
m=l;
}
s=s->next;}
}
void jiao(link &p,link &h,link &q)
{ //求交集
link l,s,t,m;
int j=0;
Elem i=0;
q=new LNode;
q->date=NULL;
q->next=NULL;
m=q;
s=h->next;
while (s)
{i=s->date;
j=Lo 13、cate(p,i);
if(j==1)
{l=new LNode;
l->date=s->date;
l->next=NULL;
m->next=l;
m=l;
}
s=s->next;
}
}
void cha(link &p,link &h,link &q)
{//求差集
link l,s,t,m;
int j=0;
Elem i=0;
q=new LNode;
q->date=NULL;
q->next=NULL;
m=q;
s=p->next;
w 14、hile (s)
{i=s->date;
j=Locate(h,i);
if(j==0)
{l=new LNode;
l->date=s->date;
l->next=NULL;
m->next=l; m=l;}
s=s->next;} }
void shengcheng(link &p,link &h,link &q)
{ int i,j=0;
Elem e;
for(i=0;i<11;)
{if(i==0)
{p=new LNode;
p->date=NULL;
p->next=NULL;
15、 h=p;q=p;i++;}
else
{e=rand()%50+1;
j=Locate(p,e);
if(j==0)
{LInsert(p,e);i++;}}}}
运行结果:
4. void bing(link &p,link &h,link &q)
{ //并集
link l,s,m;
int j=0,i=0;
q=new LNode;
q->date=NULL;
q->next=NULL;
s=p->next;
m=q;
while(s)
{l=new LNode 16、
l->date=s->date;
l->next=NULL;
s=s->next;
m->next=l;
m=l;}
s=h->next;
while (s)
{i=s->date;
j=Locate(p,i);
if(j==0)
{LInsert(q,i);}
s=s->next;} }
void jiao(link &p,link &h,link &q)
{//交集
link l,s,t,m;
int j=0;
Elem i=0;
q=new LNod 17、e;
q->date=NULL;
q->next=NULL;
m=q;
s=h->next;
while (s)
{i=s->date;
j=Locate(p,i);
if(j==1)
{l=new LNode;
l->date=s->date;
l->next=NULL;
m->next=l;
m=l;}
s=s->next;} }
void cha(link &p,link &h,link &q)
{//差集
link l,s,t,m;
int j=0;
El 18、em i=0;
q=new LNode;
q->date=NULL;
q->next=NULL;
m=q;
s=p->next;
while (s)
{i=s->date;
j=Locate(h,i);
if(j==0)
{l=new LNode;
l->date=s->date;
l->next=NULL;
m->next=l;
m=l;}
s=s->next;} }
void shengcheng(link &p,link &h,link &q)
{int i,j=0;
Elem e;
19、for(i=0;i<11;)
{if(i==0)
{p=new LNode;
p->date=NULL;
p->next=NULL;
h=p;q=p;i++;}
else
{e=rand()%50+1;
j=Locate(p,e);
if(j==0)
{LInsert(p,e);i++;}}}}
运行结果:
5. #include 20、struct kill 类型长度
struct kill
{ int num;
struct kill *next; };
struct kill *create(int m)
{struct kill *head,*p1,*p2; int i;
p1=p2=(struct kill*)malloc(LEN);
head=p1;
head->num=1;
for(i=1,p1->num=1;i 21、2->next=head;
return head; }
struct kill *findout(struct kill *start,int n)
{int i;
struct kill *p;
i=n;
p=start;
for(i=1;i 22、
free(out);
return next; }
void main()
{ int m,n,i,servive;
struct kill *p1,*p2;
cout<<"请输入参加杀人游戏总人数m:"< 23、2; }
servive=p2->num;
free(p2); }
cout<<"幸存者是:"< 24、查的10个学生
int top; //已抽查学生数
int choose()
{int n=rand()%35; //随机抽取
for(int i=0;i 25、d main()
{char a='Y';
srand(time(0)); //随机数初始化
int i;for(i=0;i<35;i++)//学生初始化
{stu[i].id=i+1;stu[i].times=0;}
while(a=='Y'||a=='y')
{int tmp;top=0;
for(i=0;i<10;i++) //抽取10个学生
{tmp=choose(); //抽取学生
cho[top++]=tmp;
stu[tmp].times++;
cout<<"第"< 26、p].times))< 27、要加工n个工件,每个工件i都有一个确定的加工时间 ,采用按照 递增的顺序,进行加工,计算每个工件的完成时间(初始加工时间为0)。设计一个算法,输入工件数量n,随机在[1,30]的区间内产生每个工件的加工时间 。按照SPT规则进行加工,输出每个工件的完成时间。
5、采用EDD规则的单机生产计划问题。问题描述如下,存在一台机器,要加工n个工件,每个工件i都有一个确定的加工时间 ,同时每个工件都有一个确定的交货期 ,采用按照 递增的顺序,进行加工,计算每个工件的完成时间(初始加工时间为0)。设计一个算法,输入工件数量n,随机在[1,30]的区间内产生每个工件的加工时间 ,在区间[2,20*n]内 28、随机产生每个工件的交货期 。按照EDD规则进行加工,输出每个工件的完成时间,计算每个工件i完成时间和 的差值。
1. void Ininstack(stack &s)
{//初始化
s.elem=new stype[SIZE];
s.top=-1;
s.size=SIZE;
s.insize=IN;}
void INsize(stack &s)
{//扩容
stype *a;int i;
a=new stype[s.size+s.insize];
for(i=0;i<=s.t 29、op;i++)
a[i]=s.elem[i];
delete []s.elem;
s.elem=a;
s.size+=s.insize;}
void Push(stack &s,stype e)
{ //入栈
if(s.top==(s.size-1))
INsize(s);s.top++;
s.elem[s.top]=e;}
stype Pop(stack &s)
{//出栈
stype e;e=s.elem[s.top];
s.top--;return e;}
stype GetT 30、op(stack s)
{//取栈顶
stype e;e=s.elem[s.top ];
return e;}
void main()
{stype e,t,ch;
stack s;char a[20];
int i=0,n;Ininstack(s);
cout<<"请输入算术表达式(以$结尾):";
while(ch!='$')
{cin>>ch;
a[i]=ch;i++;}
n=i;
for(i=0;i 31、 {e=a[i];Push(s,e);}
if(a[i]=='}'||a[i]==']'||a[i==')'])
{t=GetTop(s);
if(a[i]=='}' && t=='{')Pop(s);
else if(a[i]==']' && t=='[')
Pop(s);else if(a[i]==')' && t=='(')
Pop(s);}}
if(s.top==-1)
cout<<"括号匹配!"< 32、ack(stack &s)
{ //初始化
s.elem=new stype[SIZE];s.top=-1;
s.size=SIZE;s.insize=IN;}
void INsize(stack &s)
{ //扩容
stype *a;int i;
a=new stype[s.size+s.insize];
for(i=0;i<=s.top;i++)
a[i]=s.elem[i];
delete []s.elem;
s.elem=a;s.size+=s.insize;}
void Push(s 33、tack &s,stype e)
{//入栈
if(s.top==(s.size-1))
INsize(s);s.top++;
s.elem[s.top]=e;}
stype Pop(stack &s)
{ //出栈
stype e;e=s.elem[s.top];s.top--;
return e;}
void main()
{stack s;int a,b;Ininstack(s);
cout<<"请输入任意非负十进制数:";
cin>>a;
cout<<"请输入需要转换的进制数(进制数为二至九)






