单向环表实现约瑟夫环.docx
- 文档编号:29989513
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:8
- 大小:16.64KB
单向环表实现约瑟夫环.docx
《单向环表实现约瑟夫环.docx》由会员分享,可在线阅读,更多相关《单向环表实现约瑟夫环.docx(8页珍藏版)》请在冰豆网上搜索。
单向环表实现约瑟夫环
《数据结构与算法设计》
实验报告
——实验1(选作)
学院:
自动化学院
班级:
自动化2班
学号:
1320110130
姓名:
赵帅
一、实验目的:
进一步加强对抽象数据类型的理解;掌握对顺序表的各种操作;
二、实验内容
归并顺序表。
三、程序设计
1、概要设计:
(说明程序中用到的抽象数据类型定义,宏定义,主程序的流程以及各个程序模块之间的调用关系,给出主要流程图)
抽象数据类型定义:
ADTList{
数据对象:
D={ai|ai∈ElemSet,i=1,2,…,n,n≥0}
数据关系:
R1={
基本操作:
initlist_Sq(SqList&L)
操作结果:
构造一个空的线性表L。
ListEmpty(L)
初始条件:
线性表L已存在。
操作结果:
若L为空表,则返回TRUE,否则返回FALSE。
ListInsert_Sq(SqList*L,inti,ElemTypee)
初始条件:
线性表L已存在。
操作结果:
在第i个位置上插入一个元素。
Print_Sq(SqListL)
初始条件:
线性表已存在。
操作结果:
输出顺序表。
}ADTList
宏定义:
#defineLength10
#defineLISTINCREMENT10
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR-1
#defineOVERFLOW-2
typedefintStatus;
typedefintElemType;
流程图:
四、程序调试分析
(程序运行中遇到的问题与改正措施,以及对程序调试的体会与收获)
在c的环境下运行了程序,应该在c++的文件里运行;
声明变量i,在第一次使用后没有重新赋值为零,直接作为下次输入数据时的变量;
没有搞明白引用的关系;
五、用户使用说明
(说明如何使用你的程序,给出操作步骤)
双击应用程序,显示器上出现“请输入按升序排列的整数序列La=”时,输入用户想要输入的数据后并输入0做为结束标记,按“enter”结束;显示器上出现“请输入按升序排列的整数序列Lb=”时,输入用户想要输入的数据并输入0做为结束标记,按“enter”结束。
即可得到想要的结果。
六、程序运行结果
(列出测试结果,包括输入和输出,最好给出2个测试结果)
1,请输入按升序排列的整数序列La=34560
请输入按升序排列的整数序列Lb=56780
合并后的顺序表为:
345678
1,2请输入按升序排列的整数序列La=1234567890
请输入按升序排列的整数序列Lb=234540
合并后的顺序表为:
123456789
七、程序清单
(要求给函数加上注释)
/*顺序表的归并操作*/
#include
#include
#include
#include
#defineLength10
#defineLISTINCREMENT10
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR-1
#defineOVERFLOW-2
typedefintStatus;
typedefintElemType;
typedefstructlineorder{
int*elem;
intlength;
intlistsize;
}SqList;
Statusinitlist_Sq(SqList&L)/*初始化顺序表*/
{L.elem=(ElemType*)malloc(sizeof(ElemType)*Length);
if(!
L.elem)exit(OVERFLOW);
L.listsize=Length;
L.length=0;
returnOK;
}
Statuslistempty_Sq(SqListc)/*测试顺序表是否为空*/
{
if(c.length!
=0)return(FALSE);
return(TRUE);
}
StatusListInsert_Sq(SqList*L,inti,ElemTypee)/*在第i个位置上插入一个元素*/
{intj,*newbase;
if(i<1||i>L->length+1)returnERROR;
if(L->length>=L->listsize){
newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
if(!
newbase)exit(OVERFLOW);
L->elem=newbase;L->listsize+=LISTINCREMENT;
}
for(j=L->length;j>=i;--j)
L->elem[j]=L->elem[j-1];
L->elem[j]=e;++L->length;
returnOK;
}
voidPrint_Sq(SqListL)/*输出顺序表*/
{inti;
if(listempty_Sq(L))
printf("\nIt'sempty!
");
else
for(i=0;i printf("%d",L.elem[i]); } intLocateElem_Sq(SqList*L,ElemTypee)/*返回元素e在顺序表中的位置*/ {inti=1; ElemType*p; p=L->elem; while(i<=L->length&&! (*p==e)){i++;p++;} if(i<=L->length)returni; returnFALSE; } MergeList(SqListLa,SqListLb,SqList&Lc) {inti=1,j=1,k=0,La_len=La.length,Lb_len=Lb.length; ElemTypeai,bj; while((i<=La_len)&&(j<=Lb_len)) {ai=La.elem[i-1];bj=Lb.elem[j-1]; if(ai else{ if(ai==bj){ListInsert_Sq(&Lc,++k,bj);j++;i++;} else{ListInsert_Sq(&Lc,++k,bj);j++;} } } while(i<=La_len){ai=La.elem[-1+i++];ListInsert_Sq(&Lc,++k,ai);} while(j<=Lb_len){bj=Lb.elem[-1+j++];ListInsert_Sq(&Lc,++k,bj);} returnOK; } voidmain() { SqListLa,Lb,Lc; intn,m,i=0,flag1=1; intflag2=1; initlist_Sq(La); initlist_Sq(Lb); printf("\n请输入按升序排列的整数序列La="); while(flag1) { scanf("%d",&n); if(n! =0) ListInsert_Sq(&La,++i,n); else flag1=0;//标志位置零 } printf("\n"); i=0;//变量置零为下次输入使用 printf("\n请输入按升序排列的整数序列Lb="); while(flag2) { scanf("%d",&m); if(m! =0) ListInsert_Sq(&Lb,++i,m); else flag2=0;} printf("\n"); initlist_Sq(Lc); MergeList(La,Lb,Lc); printf("合并后的顺序表为: "); Print_Sq(Lc); printf("\n"); getch(); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单向 实现 约瑟夫