数据结构实验报告(实验二 约瑟夫环)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
韶关学院
学生实验报告册
实验课程名称:数据结构与算法
实验项目名称:实验二线性表及其应用
约瑟夫环
实验类型(打√):(基础、综合、设计√)
院系:信息工程学院计算机系专业:*****
姓名:*** 学号:*****
指导老师:陈正铭
韶关学院教务处编制
一、实验预习报告内容
二、实验原始(数据)记录
实验时间:2007 年 4 月 4 日(星期三第7,8 节)实验同组人:
三、实验报告内容
2007年4 月5 日
注:1、如有个别实验的实验报告内容多,实验报告册页面不够写,或有识图,画图要求的,学生应根据实验指导老师要求另附相同规格的纸张并粘贴在相应的“实验报告册”中。
2、实验报告册属教学运行材料,院系(中心)应按有关规定归档保管。
【源程序】
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
/* 设立无头结点的单循环链表*/ typedef struct LNode{
int id; /* 编号*/
int pw; /* 密码*/
struct LNode *next;
}LNode,*LinkList;
void main()
{
int m,n,pw,i=1,j=0; /* m为初始报数值,n 为参与人数,pw为密码临时保存变量,i、j 为循环变量*/
LinkList L,p,q; /* L为链表头指针,p、q为临时指针*/
printf("输入人数n(n>0):");
scanf("%d",&n);
printf("输入第1 人密码:");
scanf("%d",&pw);
L=(LinkList)malloc(sizeof(struct LNode)); L->id=i;
L->pw=pw;
L->next=L; /* 创建首结点*/
q=L; /* q指向尾结点*/
p=L; /* p指向待删除结点前驱*/
for(i=2;i<=n;i++) /* 依次输入第2……第n个参与者密码*/
{
printf("输入第%d 人密码:",i);
scanf("%d",&pw);
p=(LinkList)malloc(sizeof(struct LNode));
p->id=i;
p->pw=pw; /* 创建第i个参与者结点p */
q->next=p; /* 在尾结点q后插入新结点p */
q=p; /* 更新q指向新的尾结点p */
p->next=L; /* 新结点p的后继指针指向首结点*/
}
printf("输入约瑟夫环的初始报数值m:"); scanf("%d",&m);
printf("出列顺序为:");
for(i=1;i<=n;i++) /* n个参与者依次按规则出列*/
{
for(j=1;j
q=p->next;
/* q指向待删除结点*/
p->next=q->next;
/* 删除结点q */
printf("%d\t",q->id); /* 输出被删结点编号*/
m=q->pw;
/* m更新为被删结点的密码值*/
free(q);
/* 释放被删结点q */
}
getch();
}