小白期望变大神 发表于 2020-9-19 16:46:27

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

#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 100
#define ElementType int
typedef struct
{
        ElementType Data;
        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 = PtrL->Data;/*将 ai~ an倒序向后移动*/
      PtrL->Data = 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 = PtrL->Data;
                }
               
                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;
}

小白期望变大神 发表于 2020-9-19 17:23:55

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

insert用来插入链表,插入42个链表,然后报数到3删除 不知道程序改怎么编

小甲鱼的铁粉 发表于 2020-9-19 17:25:43

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

你上面做的是循环链表吗?

小白期望变大神 发表于 2020-9-19 17:28:57

小甲鱼的铁粉 发表于 2020-9-19 17:25
你上面做的是循环链表吗?



小甲鱼的铁粉 发表于 2020-9-19 17:38:24

你这个不是循环链表吧。。。。。你看一下这个博客吧https://blog.csdn.net/fisherwan/article/details/25796625#comments_12969518
页: [1]
查看完整版本: 约瑟夫环前面的函数写好了 但是剩下的主函数不知道怎么写下去