鱼C论坛

 找回密码
 立即注册
查看: 783|回复: 5

[已解决]约瑟夫环前面的函数写好了 但是剩下的主函数不知道怎么写下去

[复制链接]
发表于 2020-9-19 16:46:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 100
#define ElementType int
typedef struct
{
        ElementType Data[MAXSIZE];
        int Last ;

}List;


List *MakeEmpty()  //建立一个空表 
{
        List *PtrL;
        PtrL = (List*)malloc(sizeof(List));
        PtrL->Last = -1;
        return PtrL;
        
}

void Insert( ElementType X, int i, List *PtrL )
{       int j;
        if ( PtrL->Last == MAXSIZE-1 ){  /* 表空间已满,不能插入*/
                 printf("表满"); 
                 return; 
        }  
        if ( i < 1 || i > PtrL->Last+2) { /*检查插入位置的合法性*/
               printf("位置不合法");
               return; 
        } 
        for ( j = PtrL->Last; j >= i-1; j-- )
               PtrL->Data[j+1] = PtrL->Data[j];  /*将 ai~ an倒序向后移动*/
        PtrL->Data[i-1] = X;   /*新元素插入*/
        PtrL->Last++;              /*Last仍指向最后元素*/
        return; 
}

void Delete( int i, List *PtrL )   //删除 
{       int j;

        if ( i < 1 || i > PtrL->Last+1) { /*检查删除位置的合法性*/
               printf("不存在第%d个元素",i);
               return; 
        } 
        
        
        for (j=i ;j <= PtrL->Last+1;j++)   //将ai ~ an顺序往前插入 
                {
                         PtrL->Data[j-1] = PtrL->Data[j];
                }
                
                PtrL -> Last--;
        
        return; 
} 

void main()
{
        List *PtrL = MakeEmpty();
        insert(1,1,PtrL);
        prtinf("list的长度为:%d\n",PtrL->Last+1);
。。。。。。
}
最佳答案
2020-9-19 17:07:33
约瑟夫环你如果想用链表去解的话建议使用循环链表,你这个Insert是干嘛的
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
    int data;
    struct Node *pNext; 
}NODE, *pNODE;

pNODE CreateCirculationLinkList()//创建循环链表
{
    int length = 41, i;//一共有41个人
    pNODE p_new, p_temp;
    pNODE pHead = (pNODE)malloc(sizeof(NODE));//申请头指针的内存空间

    if(pHead == NULL)
    {
        printf("error create!\n");
        exit(EXIT_FAILURE);
    }

    pHead -> data = 0;
    pHead -> pNext = NULL;
    p_temp = pHead;

    for(i = 1; i <= length; ++i)
    {
        p_new = (pNODE)malloc(sizeof(NODE));
        if(p_new == NULL)
        {
            printf("error create!\n");
            exit(EXIT_FAILURE);
        }

        p_new -> data = i;//每个人的编号为i
        p_new -> pNext = NULL;
        p_temp -> pNext = p_new;
        p_temp = p_new;
    }
    p_new -> pNext = pHead -> pNext;//链表尾指向链表头
    return p_new -> pNext;
}
void WhoWillSurvive(pNODE pHead, int key)
{
    while(pHead -> pNext != pHead)
    {
        for(int i = 1; i < key; i++)
            pHead = pHead -> pNext;
        printf("the %d has been killed\n",pHead -> pNext -> data -1);
        pHead -> pNext = pHead -> pNext -> pNext;
    }
    printf("the survive person is:%2d\n",pHead -> data -1);
}
int main()
{
    pNODE head = CreateCirculationLinkList();
    WhoWillSurvive(head, 3);
    system("pause");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-19 17:07:33 | 显示全部楼层    本楼为最佳答案   
约瑟夫环你如果想用链表去解的话建议使用循环链表,你这个Insert是干嘛的
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
    int data;
    struct Node *pNext; 
}NODE, *pNODE;

pNODE CreateCirculationLinkList()//创建循环链表
{
    int length = 41, i;//一共有41个人
    pNODE p_new, p_temp;
    pNODE pHead = (pNODE)malloc(sizeof(NODE));//申请头指针的内存空间

    if(pHead == NULL)
    {
        printf("error create!\n");
        exit(EXIT_FAILURE);
    }

    pHead -> data = 0;
    pHead -> pNext = NULL;
    p_temp = pHead;

    for(i = 1; i <= length; ++i)
    {
        p_new = (pNODE)malloc(sizeof(NODE));
        if(p_new == NULL)
        {
            printf("error create!\n");
            exit(EXIT_FAILURE);
        }

        p_new -> data = i;//每个人的编号为i
        p_new -> pNext = NULL;
        p_temp -> pNext = p_new;
        p_temp = p_new;
    }
    p_new -> pNext = pHead -> pNext;//链表尾指向链表头
    return p_new -> pNext;
}
void WhoWillSurvive(pNODE pHead, int key)
{
    while(pHead -> pNext != pHead)
    {
        for(int i = 1; i < key; i++)
            pHead = pHead -> pNext;
        printf("the %d has been killed\n",pHead -> pNext -> data -1);
        pHead -> pNext = pHead -> pNext -> pNext;
    }
    printf("the survive person is:%2d\n",pHead -> data -1);
}
int main()
{
    pNODE head = CreateCirculationLinkList();
    WhoWillSurvive(head, 3);
    system("pause");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-19 17:23:55 | 显示全部楼层
小甲鱼的铁粉 发表于 2020-9-19 17:07
约瑟夫环你如果想用链表去解的话建议使用循环链表,你这个Insert是干嘛的

insert用来插入链表,插入42个链表,然后报数到3删除 不知道程序改怎么编
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-19 17:25:43 | 显示全部楼层
小白期望变大神 发表于 2020-9-19 17:23
insert用来插入链表,插入42个链表,然后报数到3删除 不知道程序改怎么编

你上面做的是循环链表吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-19 17:28:57 | 显示全部楼层
小甲鱼的铁粉 发表于 2020-9-19 17:25
你上面做的是循环链表吗?



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-19 17:38:24 | 显示全部楼层
你这个不是循环链表吧。。。。。你看一下这个博客吧https://blog.csdn.net/fisherwan/article/details/25796625#comments_12969518
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 03:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表