计算机软件设计基础课内实验指导.docx
- 文档编号:8792418
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:14
- 大小:68.66KB
计算机软件设计基础课内实验指导.docx
《计算机软件设计基础课内实验指导.docx》由会员分享,可在线阅读,更多相关《计算机软件设计基础课内实验指导.docx(14页珍藏版)》请在冰豆网上搜索。
计算机软件设计基础课内实验指导
数据结构
实
验
报
告
班级13050Z01
学号1305024343
姓名
{实验一、循环单链表及其应用---约瑟夫环问题
一、实验目的和意义
1.熟悉C语言的上机环境,进一步掌握C语言的结构特点。
2.掌握线性表的链式存储结构——单链表的定义及C语言实现。
3.掌握线性表在链式存储结构应用——循环单链表中的各种基本操作。
二、实验原理
约瑟夫环问题----编号为1,2,3…..n的n个人按顺时针方向围坐一圈,每人持一个密码。
一开始任选一个整数作为报数上限值m,从第一个人开始按顺时针方向自1开始报数,报到m时停止报数。
报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。
3、算法描述
1、结点定义
typedefstructNode
{
intnum;//编号
intpasword;//密码
structNode*next;//指针域
}LinkList;
2、创建循环链表
LinkList*creat(intn)
{
LinkList*p,*q,*head;
inti=1;
head=p=(LinkList*)malloc(sizeof(LinkList));//分配存储空间
p->num=i;
printf("请输入第1个人的密码:
");
scanf("%d",&p->pasword);
for(i=2;i<=n;i++)
{
q=(LinkList*)malloc(sizeof(LinkList));//给q分配存储空间
if(q==0)return(0);//判断是否分配成功
printf("请输入第%d个人的密码:
",i);
scanf("%d",&q->pasword);
q->num=i;
p->next=q;//将q连接在p后
p=q;
}
p->next=head;/*使链表尾指向链表头形成循环链表*/
returnhead;
}
3、出列函数
voidfun(LinkList*L)
{
intm,i;
LinkList*p=L,*q,*s;
printf("请输入m的初值:
");//输入报数上限值
scanf("%d",&m);
printf("出列顺序为:
");
while(p->next!
=p)//循环知道环内只剩一个结点
{
for(i=1;i {q=p;q紧随p后 p=p->next; } printf("%5d",p->num); 删除 m=p->pasword;//p结点密码作为报数上限s=p; 删除结点 q->next=p->next; p=p->next; free(s); } printf("%5d",p->num); printf("\n") } 四、程序清单 #include #include typedefstructNode { intnum; intpasword; structNode*next; }LinkList; LinkList*creat(intn) { LinkList*p,*q,*head; inti=1; head=p=(LinkList*)malloc(sizeof(LinkList)); p->num=i; printf("请输入第1个人的密码: "); scanf("%d",&p->pasword); for(i=2;i<=n;i++) { q=(LinkList*)malloc(sizeof(LinkList)); if(q==0)return(0); printf("请输入第%d个人的密码: ",i); scanf("%d",&q->pasword); q->num=i; p->next=q; p=q; } p->next=head;/*使链表尾指向链表头形成循环链表*/ returnhead; } voidfun(LinkList*L) { intm,i; LinkList*p=L,*q,*s; printf("请输入m的初值: "); scanf("%d",&m); printf("出列顺序为: "); while(p->next! =p) { for(i=1;i {q=p; p=p->next; } printf("%5d",p->num); m=p->pasword; s=p; q->next=p->next; p=p->next; free(s); } printf("%5d",p->num); printf("\n"); } voidmain() {LinkList*L; intn; printf("请输入实验人数: "); scanf("%d",&n); L=creat(n); fun(L); } 五、调试运行结果 实验二树及二叉树 一、实验目的和意义 1.通过实验,掌握二叉树的建立与存储 2.通过实验,掌握二叉树的非递归遍历方法 二、实验原理 1.建立与存储二叉树 2.实现二叉树的先序遍历、中序遍历、后序遍历 三、算法描述 1、二叉树结构体定义 typedefstructBiTNode { chardata;//元素数据类型 BiTNode*left_child,*right_child;//左右孩子指针 }BiTNode,*BiTree; 2、建立一棵二叉树 intCreateBiTree(BiTree&T) { charch; cin>>ch; if(ch=='.')T=NULL; else { T=newBiTNode;//建立新结点 T->data=ch; CreateBiTree(T->left_child);//递归调用 CreateBiTree(T->right_child); } return1; } 3、输出二叉树 voidOutput(BiTree&T) { if(! T)//判空 { cout<<"空树! \n"; return; } cout< if(T->left_child)Output(T->left_child);//递归调用 if(T->right_child)Output(T->right_child); } 4、先序遍历二叉树 voidPreOrder(BiTree&T) { if(! T)return;//判空 cout< PreOrder(T->left_child); PreOrder(T->right_child); } 5、中序遍历二叉树 voidInOrder(BiTree&T) { if(! T)return; InOrder(T->left_child); cout< InOrder(T->right_child); } 6、后序遍历二叉树 voidPostOrder(BiTree&T) { if(! T)return; PostOrder(T->left_child); PostOrder(T->right_child); cout< } 4、程序清单 #include #include usingnamespacestd; #defineMAXSIZE100 typedefstructBiTNode { chardata; BiTNode*left_child,*right_child; }BiTNode,*BiTree; //建立一棵二叉树 intCreateBiTree(BiTree&T) { charch; cin>>ch; if(ch=='.')T=NULL; else { T=newBiTNode; T->data=ch; CreateBiTree(T->left_child); CreateBiTree(T->right_child); } return1; } //输出二叉树 voidOutput(BiTree&T) { if(! T) { cout<<"空树! \n"; return; } cout< if(T->left_child)Output(T->left_child); if(T->right_child)Output(T->right_child); } //先序遍历二叉树 voidPreOrder(BiTree&T) { if(! T)return; cout< PreOrder(T->left_child); PreOrder(T->right_child); } //中序遍历二叉树 voidInOrder(BiTree&T) { if(! T)return; InOrder(T->left_child); cout< InOrder(T->right_child); } //后序遍历二叉树 voidPostOrder(BiTree&T) { if(! T)return; PostOrder(T->left_child); PostOrder(T->right_child); cout< } voidmain() { inta; BiTreeT; cout<<"先序序列创建二叉树: \n"; a=CreateBiTree(T); Output(T); cout< cout<<"先序遍历输出为: \n"; PreOrder(T); cout< cout<<"中序遍历输出为: \n"; InOrder(T); cout< cout<<"后序遍历输出为: \n"; PostOrder(T); cout< } 5、调试运行结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 软件设计 基础课 实验 指导
![提示](https://static.bdocx.com/images/bang_tan.gif)