知识大全 北京大学数据结构上机考题
Posted 整数
篇首语:所谓一见钟情不过见色起意,所谓日久生情不过权衡利弊。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 北京大学数据结构上机考题相关的知识,希望对你有一定的参考价值。
编一C程序 它能读入集合A的一串整数(以 为结束标记 整数个数小于 )和集合B 的一串整数(以 为结束标记 整数个数小于 ) 计算并以从小到大的次序输出A B 的所有元素(为A或B输入时 同一个数可能出现多次 而A与B的差集中同一个数不能出现多次) (注 程序的可执行文件名必须是 e exe)
(注 程序的可执行文件名必须是 e exe)
*/
#include
void BubbleSort(int r[] int n)
//冒泡排序(有小到大)
int i j k;
int exchange;
for(i= ;i<=n;i++)
exchange= ;
for(j=n ;j>=i;j )
if(r[j+ ]
k=r[j+ ];
r[j+ ]=r[j];
r[j]=k;
exchange= ;
if(!exchange)
break;
int DisaSameYs(int r[] int n)
//消除数组r[]中的重复元素 并返回消除后数组剩余的元素个数
int w x y;
for(w= ;w<=n;w++)
for(x=w+ ;x<=n;x++)
if(r[w]==r[x])
n ;
for(y=x;y<=n;y++)
r[y]=r[y+ ];
//endfor
x ;
//endif
//endfor
//endfor
return n;
int cha(int m[] int n[] int l[] int Countaa int Countbb)
//求差集
int i= j= k= ;
int exch;
while(i<=Countaa)
exch= ;//交换变量为
for(j= ;j<=Countbb;j++)
//用集合的第一个元素分别和另一个集合的各元素相比较
//然后再用第二个元素(直到最后一个元素)和另一个集合的各元素相比较
if(m[i]==n[j])
//如果相同 交换变量变为
exch= ;
break;
//endif
//endfor
if(!exch)
//如果没有相同的就保存m[i]到l[]中
l[k]=m[i];
k++;
i++;
//endwhile
return k;
/*
void testds(int r[] int n)
//测试消除数组中的重复元素的效果用下列循环输出
int z;
for(z= ;z<=n;z++)
printf( %d r[z]);
printf( \\n );
*/
void main()
int a[ ] b[ ] c[ ];
int exchange= ;
int i j k CountA CountB CountC;
printf( input a\\n );
for(i= ;i<= ;i++)
scanf( %d &a[i]);
if(a[i]== )
break;
CountA=i ;
BubbleSort(a CountA);
CountA=DisaSameYs(a CountA);
// testds(a CountA);
printf( \\ninput b\\n );
for(i= ;i<= ;i++)
scanf( %d &b[i]);
if(b[i]== )
break;
CountB=i ;
BubbleSort(b CountB);
CountB=DisaSameYs(b CountB);
//testds(b CountB);
CountC=cha(a b c CountA CountB);
printf( \\n\\n );
for(i= ;i<=CountC ;i++)
printf( %d c[i]);
printf( \\n );
//////////////////////////////////////////////////////
//模式匹配
#include
#include
typedef struct
// int ch[ ];
char ch[ ];
int length;
SeqString;
int NaiveStrMatch(SeqString T SeqString P)
int i j k;
int m=P length;
int n=T length;
for(i= ;i<=n m;i++)
j= ;k=i;
while(j
k++;j++;
if(j==m)
return i;
//endfor
return ;
//NaiveStrMatch
SeqString CreatStr(SeqString R)
int i;
printf( input data\\n );
for(i= ;i< ;i++)
// scanf( %d &R ch[i]);
// if(R ch[i]== )
scanf( %s &R ch[i]);
if(!(strcmp(&R ch[i] )))
break;
R length=i ;
return R;
void main()
int n;
SeqString Str ;
Str =CreatStr(Str );
SeqString Str ;
Str =CreatStr(Str );
n=NaiveStrMatch(Str Str );
printf( %d\\n n);
/*
编一C程序 它能读入集合A的一串整数(以 为结束标记 整数个数小于 )
和集合B的一串整数(以 为结束标记 整数个数小于 ) 计算出A与B的交集
并以由小到大的次序输出A与B的交集中的所有整数(输入整数时 相邻的两个用空格隔开 为A或B输入时 同一个数可能出现多次 而A与B的交集中同一个数不能出现多次) (注 程序的可执行文件名必须是 e exe)
*/
//注意调试程序时要多输入重复数据调试;本程序是根据青龙提供的程序改编 消除了重复数据的错误!;
#include
#include
void BuCountbbleSort(int r[] int n)
//冒泡排序
int i j k;
int exchange;
for(i= ;i<=n;i++)
exchange= ;
for(j=n ;j>=i;j )
if(r[j+ ]
k=r[j+ ];
r[j+ ]=r[j];
r[j]=k;
exchange= ;
if(!exchange)
break;
int BingJi(int m[] int n[] int l[] int Countaa int Countbb)
//求集合的并集
int i= j= k= ;
while(i<=Countaa&&j<=Countbb)
if(m[i]
//如果 m[i]
l[k]=m[i];
k++;
i++;
//endif
else if(m[i]>n[j])
//如果 m[i]>n[j]则取小的值n[j] 然后j++;
l[k]=n[j];
k++;
j++;
//end elseif
else
//如果 m[i]==n[j] 可以任取一个值 然后i++;j++;
l[k]=m[i];
k++;
i++;
j++;
//endelse
//endwhile
if(i>Countaa)
//如果i>Countaa 即数组m[i]中的元数个数较少
//则把n[j]中的剩余元素 都付给l[]
while(j<=Countbb)
l[k]=n[j];
j++;
k++;
//endwhile
//endif
if(j>Countbb)
//如果j>Countbb 即数组n[i]中的元数个数较少
//则把m[j]中的剩余元素 都付给l[]
while(i<=Countaa)
l[k]=m[i];
i++;
k++;
//endwhile
//endif
return k;//返回生成的数组的元数个数
//end BuCountbbleSort
int JiaoJi(int m[] int n[] int l[] int Countaa int Countbb)
//求集合的交集
///////////////////////////////////
//消除数组m[]中的重复元素
int w x y;
for(w= ;w<=Countaa;w++)
for(x=w+ ;x<=Countaa;x++)
if(m[w]==m[x])
Countaa ;
for(y=x;y<=Countaa;y++)
m[y]=m[y+ ];
//endfor
x ;
//endif
//endfor
//endfor
/*
//测试消除数组中的重复元素的效果用下列循环输出
int z;
for(z= ;z<=Countaa;z++)
printf( %d m[z]);
printf( \\n );
*/
//消除结束
///////////////////////////////////
///////////////////////////////////
//求交集
相关参考
求拓朴排序后结果及用矩阵表示……输入形式为n……(就是上机练习题上的哪个题不过多加了一个用矩阵表示)…… 输入一串整数以相反次序输出 第题我做的答案是这样的第题太简单就不用了 //有的未加判
随机产生个整数在计算机内建立有序链表并输出该链表#includeioh #includestdlibh #includestdioh #includemathh typedefstruct
求拓朴排序后结果及用矩阵表示……输入形式为n……(就是上机练习题上的哪个题不过多加了一个用矩阵表示)…… 输入一串整数以相反次序输出 第题我做的答案是这样的第题太简单就不用了 //有的未加判
数据结构练习题 编一C程序它能根据读入的数据构造有向图G并输出G的邻接矩阵和DFS遍历序列(从V开始)图的输入形式为nViVjViVjViVj……VimVjm(为输入结束标记)它们都是整数且&g
编一C程序它能读入集合A的一串整数(以为结束标记整数个数小于)和集合B的一串整数(以为结束标记整数个数小于)计算出A与B的交集并以由小到大的次序输出A与B的交集中的所有整数(输入整数时相邻的两个用
数据结构练习题 编一C程序它能读入一个大写英文字母串(字母个数不多于字母两两不同)并构造以这些字母为关键字的二叉排序树再输出该二叉排序树的后序序列和页结点个数 (注程序的可执行文件名必须是eexe
编一C程序它能对输入的一串整数(不多于个以为结束标记)到数组a中再对a的元素进行直接插入排序(从小到大排序)输出排序结果和所用关键字比较次数(输入时两个相邻的整数用空格隔开) (注程序的可执行文件名
编一C程序它能读入一串(n个)整数(以为结束标记)并判断第个整数在后(n)个整数中出现的次数再输出该次数(输入时两个相邻的整数用空格隔开) (注程序的可执行文件名必须是eexe存于你的账号或其deb
编一C程序它能根据读入的数据构造有向图G并输出G的DFS遍历序列(从V开始)图的输入形式为nVViVViVVi……ViVin(为输入结束标记其余的值都>=且n> (注程序的可执行文件
编一C程序它能读入集合A的一串整数(以为结束标记整数个数小于) 和集合B的一串整数(以为结束标记整数个数小于)计算出A与B的交集 并以由小到大的次序输出A与B的交集中的所有整数(输入整数时相邻