天大数据结构实验报告一_约瑟夫环

时间:2024.3.31

数据结构上机实验报告

题目:用单循环链表解决约瑟夫问题

学生姓名                  

学生学号                  

学院名称    计算机学院    

    计算机科学与技术

         20##.10.7     

目  录

第一章、需求分析 ………………………………………… 1

  1.1  原题表述  ……………………………………………  1

  1.2  所选的要求及整体规划  …………………………… 1

第二章、概要设计 ………………………………………… 2

2.1  抽象数据类型 ………………………………………… 2

2.2  算法 …………………………………………………… 2

第三章、详细设计 ………………………………………… 3

3.1  程序代码 ……………………………………………… 3

第四章、调试分析 ……………………………………… 7

4.1  调试工作 ……………………………………………… 7

4.2  时间复杂度  …………………………………………  7

第五章、测试结果 ……………………………………… 8

5.1  输入数据和输出数据样例 …………………………  8

                     

第一章    需求分析

1.1  原题表述

设n个人围坐在一圆桌周围,现在从第s个人开始报数,数到第m个人,让他出局;然后从出局者的下一人重新开始报数,数到第m个人,再让他出局······如此反复,直到所有的人全部出局为止。

1.2  所选的要求及整体规划

   对于任意给定的n、s和m,求出这个n个人的出局序列,数据结构采用单循环链表。构造不带头结点的单循环链表。

第二章   概要设计

2.1  抽象数据类型

    不带头结点的单循环链表

2.2  算法

建立一个不带头结点的空循环链表,依次在链表中添加数据域为1~n的n个数据元素,此时指针head指向第一个元素,再用一个for循环让头指针head指向第s个元素,之后用while循环让head指向第m-1个元素,删除第m个元素,head指向第m+1个元素,直至链表中只剩一个元素。依次输出被删除的元素及最后剩余的元素。

 

 

第三章   详细设计

3.1  程序代码

#include

#include

typedef struct node

{   

    int data;   

    struct node *next;

}node;

//函数功能:构造不带头结点的循环链表并赋值1~n,头指针head指向第s个人

node* create(int n,int s)

{   

    node *head;  

    node *p, *q, *r;  

    int i,j;       

   

    if(n<=0) return NULL;  //若分配内存失败返回    

   

    //把长度为n的链表赋值1~n

    head=(node*)malloc(sizeof(node));   

    head->data=1;   

    head->next=NULL;       

    p=head;   

    for(i=1; i

    {       

       q=(node*)malloc(sizeof(node));       

       q->data=i+1;      

       p->next=q;       

       p=q;   

    }        

    //构造循环链表

    q=(node*)malloc(sizeof(node));   

    q->data=n;   

    p->next=q;   

    q->next=head;//不带头结点

   

    for(j = 1; j < s; j++)//从第s个人开始数

    {

       r = head -> next;

       head = r; 

    }       

   

    return head;

}

int del(node *head)//删除

{   

    node *p, *q;   

    if(head==NULL) return -1;      

   

    p=head;                  

    q=p->next;       

    p->next=q->next;       

    p=q->next;       

    free(q);      

    head=p;   

    return 1;

}

int main()

{   

    int n,m,s,person;   

    node *head,*r,*p;

   

    //输入n、m、s      

    printf("Enter n: \n");   

    scanf("%d",&n);

    printf("Enter m: \n");   

    scanf("%d",&m);

    printf("Enter s: \n");   

    scanf("%d",&s);

          

    head = create(n,s);//head指向第s个人

     

    while(head -> next != head)//循环结束后链表只剩一个元素

    {

       //数到第m个删除,head指向m的前一个

       for(int i = 1; i < m-1; i++)

       {

           r = head -> next;

           head = r;

       }

       person = head -> next ->data;

       printf("Number  %d is out\n",person);

       p = head -> next -> next;

       del(head);

       head = p; 

              

    }

    person = head -> data;

    printf("Number  %d is out\n",person);

   

    system("pause");

    return 0;

}

第四章   测试分析

4.1  调试工作

    检测每个循环输出的被删除的元素是否正确,输出结果是否完整

4.2  时间复杂度

   O(n^2)

第五章   输出结果

5.1  输入数据和输出数据样例

分别输入参数n、m、s,输出结果如图所示。

 

更多相关推荐:
数据结构约瑟夫环课程设计实验报告

徐州工程学院信电工程学院数据结构课程设计学院课程设计报告课程名称数据结构课程设计报告专业班级学生姓名学号设计题目约瑟夫环指导教师设计起止时间年月日至年月日徐州工程学院信电工程学院数据结构课程设计徐州工程学院信电...

约瑟夫环数据结构实验报告

数据结构上机实验报告1需求分析1用一个循环链表实现n个人按顺时针排成一圈每个人看作一个节点每个节点都是一个结构体类型包含三个域序号域data密码域key指向下一个人的指针域next2程序开始时由用户任意输入人数...

数据结构实验报告1约瑟夫环

一上机实验的问题和要求约瑟夫环问题描述编号是12nngt0的n个人按照顺时针方向围坐一圈每人持有一正整数密码开始时任选一个正整数作为报数上限值m从某个人开始按顺时针方向自1开始顺序报数报到m时停止报数报m的人出...

数据结构约瑟夫环实验报告

数据结构实验报告实验课程线性表的应用专业年级班级姓名学号实验报告

数据结构实验报告约瑟夫环20xx053003

工程实践1项目报告20xx年12月成都信息工程学院计算机学院一问题描述约瑟夫环问题描述设有n个人围坐在圆桌周围现从某个位置i上的人开始报数数到m的人就站出来下一个人即原来的第m1个位置上的人又从1开始报数再是数...

数据结构实验报告一-约瑟夫环问题

实验1约瑟夫环问题1.需求分析(1)输入的形式和输入值的范围:每一次输入的值为两个正整数,中间用逗号隔开。若分别设为n,m,则输入格式为:n,m。不对非法输入做处理,即假设输入都是合法的。(2)输出的形式:输出…

数据结构与算法实验报告-约瑟夫环

题目约瑟夫环问题班级姓名学号完成日期20xx1228一需求分析1问题描述设有n个人围坐在一个圆桌周围现从第s个人开始报数数到第m的人出列然后从出列的下一个人重新开始报数数到第m的人又出列如此反复直到所有的人全部...

北京理工大学数据结构实验报告1

数据结构与算法统计实验报告学院班级学号姓名一实验目的1熟悉VC60环境学习使用C实现链表的存储结构2通过编程上机调试进一步理解线性表链表环表的基本概念二实验内容采用单向环表实现约瑟夫环请按以下要求编程实现从键盘...

数据结构实验报告(杨辉三角_约瑟夫环)

实验一杨辉三角形Pascalstriangle一需求分析1输入的形式和输入值的范围本程序中需输入的杨辉三角级数level为正整数由键盘输入以回车结束2输出的形式通过屏幕输出杨辉三角3程序所能达到的功能用户从键盘...

河北工业大学-数据结构实验报告-约瑟夫环问题实验报告

实验一约瑟夫环问题一实验目的要求设计一个程序模拟约瑟夫环问题过程求出出列编号序列二实验内容约瑟夫环问题设编号为123n的nngt0个人按顺时针方向围坐一圈每个人持有一个正整数密码开始时任选一个正整数做为报数上限...

约瑟夫环-数据结构

数据结构期末试验报告学院专业学号班级姓名20xx1212Joseph约瑟夫环上机实验报告实验名称joseph约瑟夫环题目要求的约瑟夫环操作编号是12n的n个人按照顺时针方向围坐一圈每个人只有一个密码正整数一开始...

数据结构约瑟夫环问题

数据结构实验报告题目约瑟夫环问题一设计内容问题描述约瑟夫环问题的一种描述是编号为123n的n个人按顺时针方向围坐一圈每人手持一个密码正整数一开始任选一个整数作为报数上限值从第一人开始顺时针自1开始顺序报数报到m...

数据结构约瑟夫环实验报告(35篇)