数据结构链式顺序表二进制素数相同数整除.docx
- 文档编号:30356156
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:29
- 大小:480.18KB
数据结构链式顺序表二进制素数相同数整除.docx
《数据结构链式顺序表二进制素数相同数整除.docx》由会员分享,可在线阅读,更多相关《数据结构链式顺序表二进制素数相同数整除.docx(29页珍藏版)》请在冰豆网上搜索。
数据结构链式顺序表二进制素数相同数整除
华南农业大学理学院课程论文(设计)
2011-2012 学年第2学期
课程名称:
数据结构课程设计
课程性质:
实践课
专业班级:
10级信息与计算科学2班
考核方式:
考查
学生姓名:
王志远
学 号:
201030760230
学时:
1周
教师姓名:
聂笃宪
自评分:
95
评语及评分
目录:
1、课程设计内容………………………………………………4
2、程序实现的基本思想………………………………………4
3、系统流程图………………………………………………….5
4、系统运行效果图……………………………………………7
5、总结…………………………………………………………13
6、参考文献…………………………………………………….13
1、课程设计内容
1.1、题目
利用随机函数产生两列(每列个数均为150且每个数均不小于10)的随整数,对这两列整数写一个程序实现如下功能操作:
1)两列整数在顺序存储方式中,
a)找出这两列数中的素数
b)把两列数中相同的数转化为二进制数输出。
2)两列整数在链表存储方式中,
a)统计两链表中相同元素的个数;
b)合并这两个链表为一个;
c)分别删除第一链表中能被2整除的结点和第二个链表中能被3整除的结点。
1.2、要求
1)利用随机函数产生两两列随机整数;
2)将两列随机整数分别存储在顺序存储结构和链式存储结构中;
3)分别实现顺序表和链式表进行题目要求的如找素数、统计数字、合并链表等操作。
4)打印显示
2、程序实现的基本思想
2.1、问题的分析
1)按照题目要求输入函数所要求函数上限,本程序随机数声明为int
2)顺序存储结构中调用InitList、ListInsert来生成顺序表,对顺序表进行Searchlist_prime函数调用(查找素数);Search_Same函数调用(查找相同数),同时这个函数调用Pop、Push等栈相关函数进行二进制转换。
3)链式存储结构中调用InitList、ListInsert来生成链表,对链表实现MergeList(合并)、Search_Delete(查找并删除)、LinkSearch_Same(统计相同结点数)等操作。
2.2、测试计划
测试组
随机数上限值
Test1
500
Test2
1000
Test3
10000
3、系统流程图
3.1、函数调用流程
3.2、总程序运行流程图
4、系统运行效果图
1)、系统进入界面
2)、题目及输入上限值
3)进入选择操作顺序表链式表操作界面
4)生成顺序表
a、找出素数;
b、找出相同数并转化为二进制。
5)、生成链式随机数
a、随机数中相同结点及个数
b、合并链表
c、整除
5、总结
通过这次课程设计,我深感作为一个程序员不容易。
在学习时由于没有留意,造成在编程时发现很多问题,例如在函数调用,指针运用等方面遇到比较大的麻烦。
为了解决这些问题,我认真复习了课本,逐个问题逐步解决。
在复习课本时对课本的知识点重新梳理一遍,使自己的基础得到巩固。
在编程中遇到不少的问题,而这些问题大部分是小问题,正因为是“小”,难发现,且导致进度停滞不前,因此,必须在编写程序时,加倍认真细心,细心写每一条语句,细心分析循环的过程,认真查看每一条语句,这样才能减少问题的出错及大大加快进度。
虽然系统实现了基本的功能,程序中还有不少问题存在,还有很多功能没有实现,需逐步加强,更需多学习,多练习,多复习,力求熟练地编写更好的程序,让这成为自己的专长。
6、参考文献
[1]谭浩强,C程序设计,北京,清华大学出版社,2005
[2]严蔚敏 吴伟民,数据结构(C语言版),清华大学出版社,2007
[3]梁作娟 胡伟 唐瑞春,数据结构(习题解答与考试指导),清华大学出版社,2004
[4]张世和 徐继延,数据结构习题解析与实训,清华大学出版社,2008
#include
#include
#include
#include
#include
#include
#defineMINNUMBER10
#defineLIST_INT_SIZE150
#defineLISTINCREMENT10
#defineMAXSIZE200
#defineOVERFLOW-2
#defineOK1
#defineERROR0
typedefintElemType;
typedefintSElemType;
typedefintStatus;
/*************************************顺序表函数*******************************/
typedefstruct{
ElemType*elem;
intlength;
intlistsize;
ElemType*base;
ElemType*top;
}SqList;
StatusInitList(SqList&L){
L.elem=(ElemType*)malloc(LIST_INT_SIZE*sizeof(ElemType));
if(!
L.elem)exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INT_SIZE;
returnOK;
}
StatusListInsert(SqList&L,inti,ElemTypee){
ElemType*q,*p;
if(i<1||i>L.length+1)returnERROR;
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;q--){
*(p+1)=*p;
}
L.elem[i-1]=e;
L.length++;
returnOK;
}
voidSearchlist_prime(SqList&L,ElemType&e){
intdividend;
dividend=e;
intj,t;
t=1;
{for(j=2;j<=(dividend/2);j++)
if(dividend%j==0)
t=0;
if(t==1)
printf("%d\t",dividend);}
}//素数算法
StatusInitStack(SqList&S)
{
S.base=(ElemType*)malloc(LIST_INT_SIZE*sizeof(ElemType));
if(!
S.base)exit(OVERFLOW);
S.top=S.base;
S.listsize=LIST_INT_SIZE;
returnOK;
}
StatusPush(SqList&S,ElemTypee)
{
if(S.top-S.base>=S.listsize){
S.base=(ElemType*)realloc(S.base,(S.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!
S.base)exit(OVERFLOW);
S.top=S.base+S.listsize;
S.listsize+=LISTINCREMENT;
}
*S.top++=e;
returnOK;
}
StatusPop(SqList&S,ElemType&e)
{
if(S.top==S.base)returnERROR;
e=*--S.top;
returnOK;
}
StatusStackEmpty(SqListS)
{
if(S.base!
=S.top)
return0;
else
return1;
}
voidSearch_Same(SqList&La,SqList&Lb){//本函数调用pop‘push函数
inti,j,e;SqListA;
for(i=0;i for(j=0;j if(La.elem[i]==Lb.elem[j]){ printf("%d",La.elem[i]); InitStack(A); while(La.elem[i]) { Push(A,La.elem[i]%2); La.elem[i]=La.elem[i]/2; } while(! StackEmpty(A)) { Pop(A,e); printf("%d",e); } printf("\t"); break; } } } }//寻找两列相同数 /******************************链表函数*****************************************/ typedefstructLNode{ SElemTypedata; structLNode*next; }Linklist; StatusInitList(Linklist*&L){ L=(Linklist*)malloc(sizeof(Linklist)); L->next=NULL; returnOK; } StatusListInsert(Linklist*&L,inti,SElemTypee) {Linklist*p=L,*s;intk=0; while(k =NULL) {k++;p=p->next;} if(p==NULL) return0; else{ s=(Linklist*)malloc(sizeof(Linklist)); s->data=e; s->next=p->next; p->next=s; return1;} } StatusListDelete(Linklist*&L,inti,SElemType&e){ intj=0;Linklist*p=L,*q; while(p->next&&j p=p->next;++j;}; if(! (p->next)||j>i-1)returnERROR; q=p->next; p->next=q->next; e=q->data; free(q); returnOK; } StatusDispList(Linklist*L) { Linklist*p;inti; p=L->next; while(p! =NULL) {printf("%d->",p->data); p=p->next;} returnOK; } StatusMergeList(Linklist*La,Linklist*Lb,Linklist*Lc){ Linklist*pa,*pb,*pc; pa=La->next;pb=Lb->next; Lc=pc=La; while(pa&&pb){ if(pa->data<=pb->data){ pc->next=pa;pc=pa;pa=pa->next; } else{ pc->next=pb;pc=pb;pb=pb->next; } } pc->next=pa? pa: pb; free(Lb); DispList(Lc); returnOK; } StatusSearch_Delete(Linklist*L,inti){ Linklist*p,*q;inte; p=L;q=p->next; while(q){ if(q->data%i! =0){ q=q->next; p=p->next; } else{ p->next=q->next; e=q->data; free(q); q=p->next; } } returnOK; } StatusLinkSearch_Same(Linklist*La,Linklist*Lb){ inti,j,count=0;Linklist*pa,*pb;inttem[150]; pa=La->next;pb=Lb->next; while(pa){ while(pb){ if(pa->data==pb->data) {//tem[i]=pa->data; count+=1;printf("%d",pa->data); break;} else pb=pb->next; } pa=pa->next; pb=Lb->next; } printf("》\n统计个数(↖(^ω^)↗): %d",count); returnOK; } /**************************主函数**********************************************/ intDisplay(){ intSupLimit,i,j,m,k,n,r1[LIST_INT_SIZE],r2[LIST_INT_SIZE];charnum[MAXSIZE]; SqListL,Q; Linklist*S,*P,*M; time_tt; charGoOn; printf("\n"); /************************生成随机数**********************/ srand((unsigned)time(&t)); printf("\n"); printf("㊣请输入随机数的上限整数值(下限值为10): "); scanf("%d",&SupLimit); while(SupLimit<=10){ printf("\n你输入的数字不符合规定,请从新输入: "); scanf("%d",&SupLimit);} getchar(); for(i=0;i r1[i]=rand()%(SupLimit-MINNUMBER)+MINNUMBER;//第一组随机数 } for(j=0;j r2[j]=rand()%(SupLimit-MINNUMBER)+MINNUMBER;//第二组随机数 } /******************第一问: 随机数加入顺序表存储*******************/ while (1){ printf("▆▆▆▆▆▆▆▆▆请选择操作方式▆▆▆▆▆▆▆▆▆▆▆\n\n"); printf("①输入<1>顺序表操作\n"); printf("②输入<2>为链表操作\n"); printf("③输入<3>为返回系统界面\n"); printf("④输入<0>为退出操作\n"); printf("\n▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆\n\n"); printf("\n"); printf("→请输入操作<1>or<2>or<3>or<0>: "); while (1){ gets(num); if(strcmp(num,"1")==0||strcmp(num,"2")==0||strcmp(num,"0")==0||strcmp(num,"3")==0) break; else printf("\n你输入的数字有错,请重新输入: "); } switch(num[0]){ case'1': printf("\n"); printf("1、生成两列顺序储存的随机数(按ENTER显示)\n"); getchar(); printf("第一列随机数为: 第二列随机数为: \n"); InitList(L);InitList(Q); for(m=1;m<=L.listsize;m++){ ListInsert(L,m,r1[m-1]);printf("%2d\t",L.elem[m-1]); printf("|*|"); ListInsert(Q,m,r2[m-1]);printf("%2d",Q.elem[m-1]);//随机数加入顺序表存储 printf("\n"); } printf("第一组共有随机数: %d\t",L.length); printf("\t第二组共有随机数: %d",Q.length); /*******************取其中素数******************************/ printf("\n"); printf("\n"); printf("1.a)、找出这两列中素数(按ENTER显示)\n"); getchar(); printf("第一列中素数为: \n"); for(k=1;k<=L.listsize;k++){ Searchlist_prime(L,r1[k-1]);} printf("\n"); printf("第二列中素数为: \n"); for(n=1;n<=L.listsize;n++){ Searchlist_prime(L,r2[n-1]);} /*******************转二进制******************/ printf("\n"); printf("1.b)、找出这两列中相同数并转为二进制(按ENTER显示)\n"); printf("\n"); getchar(); printf("(⊙_⊙)温馨提示: 左边为十进制数,右边为二进制数(⊙_⊙)\n"); Search_Same(L,Q); printf("\n"); break; case'2': /*****************第二问: 生成随机数加入链式存储********************/ printf("\n"); printf("2、生成两列链式储存的随机数(按ENTER显示)"); getchar(); InitList(S);InitList(P);InitList(M); for(m=1;m<=L.listsize;m++){ ListInsert(S,m,r1[m-1]); ListInsert(P,m,r2[m-1]); } printf("第一组链式储存随机数\n"); DispList(S); printf("\n"); printf("\n"); printf("第二组链式储存随机数\n"); DispList(P); printf("\n"); /*************相同结点个数***************/ printf("\n2.a)、两链表中相同的结点及个数为: (按ENTER显示)"); getchar(); printf("《"); LinkSearch_Same(S,P); printf("\n\n"); printf("2.b)、合并的链式列表为(按ENTER显示): \n"); getchar(); MergeList(S,P,M); /*************整除***************/ printf("\n\n"); printf("\n2.c).1、链表一删除能被2整除的结点后的链表为(按ENTER显示)\n"); getchar(); InitList(S);InitList(P); for(m=1;m<=L.listsize;m++){ ListInsert(S,m,r1[m-1]); ListInsert(P,m,r2[m-1]); } Search_Delete(S,2); DispList(S); printf("\n"); printf("\n2.c).2、链表二删除能被3整除的结点后的链表为(按ENTER显示)\n"); getchar(); Search_Delete(P,3); DispList(P); break; case'0': exit (1);break; case'3': intmain(); system("cls");main(); printf("\n\n"); break; } printf("\n\n制作人: 王志远\n班级: 10信息与计算科学2班\n学号: 201030760230\n邮箱: dream.yying@\n"); printf("\n**********************演示完毕,祝大家学习顺利! 生活愉快! **********************\n"); printf("\n********************~\(^o^)/~\(^o^)/~\(^o^)/~\(^o^)/~\(^o^)/~***********************\n"); printf("\n\n"); printf("按ENTER返回上一层"); getchar(); system("cls"); } } intmain(){ charnum[MAXSIZE]; while (1){ printf("\n###############欢迎各界人士指导! *******************键入Y开始################\n\n\n\n\n"); printf("▆▆▆▆▆▆▆▆▆请选择操作方式▆▆▆▆▆▆▆▆▆▆▆\n\n"); printf("①输入 printf("②输入 printf("\n▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆▆\n\n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 链式 顺序 二进制 素数 相同 整除