鱼C论坛

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

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

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

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

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

x
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #define MAXSIZE 100
  4. #define ElementType int
  5. typedef struct
  6. {
  7.         ElementType Data[MAXSIZE];
  8.         int Last ;

  9. }List;


  10. List *MakeEmpty()  //建立一个空表
  11. {
  12.         List *PtrL;
  13.         PtrL = (List*)malloc(sizeof(List));
  14.         PtrL->Last = -1;
  15.         return PtrL;
  16.        
  17. }

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

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

  36.         if ( i < 1 || i > PtrL->Last+1) { /*检查删除位置的合法性*/
  37.                printf("不存在第%d个元素",i);
  38.                return;
  39.         }
  40.         
  41.         
  42.         for (j=i ;j <= PtrL->Last+1;j++)   //将ai ~ an顺序往前插入
  43.                 {
  44.                          PtrL->Data[j-1] = PtrL->Data[j];
  45.                 }
  46.                
  47.                 PtrL -> Last--;
  48.         
  49.         return;
  50. }

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

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

  13.     if(pHead == NULL)
  14.     {
  15.         printf("error create!\n");
  16.         exit(EXIT_FAILURE);
  17.     }

  18.     pHead -> data = 0;
  19.     pHead -> pNext = NULL;
  20.     p_temp = pHead;

  21.     for(i = 1; i <= length; ++i)
  22.     {
  23.         p_new = (pNODE)malloc(sizeof(NODE));
  24.         if(p_new == NULL)
  25.         {
  26.             printf("error create!\n");
  27.             exit(EXIT_FAILURE);
  28.         }

  29.         p_new -> data = i;//每个人的编号为i
  30.         p_new -> pNext = NULL;
  31.         p_temp -> pNext = p_new;
  32.         p_temp = p_new;
  33.     }
  34.     p_new -> pNext = pHead -> pNext;//链表尾指向链表头
  35.     return p_new -> pNext;
  36. }
  37. void WhoWillSurvive(pNODE pHead, int key)
  38. {
  39.     while(pHead -> pNext != pHead)
  40.     {
  41.         for(int i = 1; i < key; i++)
  42.             pHead = pHead -> pNext;
  43.         printf("the %d has been killed\n",pHead -> pNext -> data -1);
  44.         pHead -> pNext = pHead -> pNext -> pNext;
  45.     }
  46.     printf("the survive person is:%2d\n",pHead -> data -1);
  47. }
  48. int main()
  49. {
  50.     pNODE head = CreateCirculationLinkList();
  51.     WhoWillSurvive(head, 3);
  52.     system("pause");
  53.     return 0;
  54. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

  13.     if(pHead == NULL)
  14.     {
  15.         printf("error create!\n");
  16.         exit(EXIT_FAILURE);
  17.     }

  18.     pHead -> data = 0;
  19.     pHead -> pNext = NULL;
  20.     p_temp = pHead;

  21.     for(i = 1; i <= length; ++i)
  22.     {
  23.         p_new = (pNODE)malloc(sizeof(NODE));
  24.         if(p_new == NULL)
  25.         {
  26.             printf("error create!\n");
  27.             exit(EXIT_FAILURE);
  28.         }

  29.         p_new -> data = i;//每个人的编号为i
  30.         p_new -> pNext = NULL;
  31.         p_temp -> pNext = p_new;
  32.         p_temp = p_new;
  33.     }
  34.     p_new -> pNext = pHead -> pNext;//链表尾指向链表头
  35.     return p_new -> pNext;
  36. }
  37. void WhoWillSurvive(pNODE pHead, int key)
  38. {
  39.     while(pHead -> pNext != pHead)
  40.     {
  41.         for(int i = 1; i < key; i++)
  42.             pHead = pHead -> pNext;
  43.         printf("the %d has been killed\n",pHead -> pNext -> data -1);
  44.         pHead -> pNext = pHead -> pNext -> pNext;
  45.     }
  46.     printf("the survive person is:%2d\n",pHead -> data -1);
  47. }
  48. int main()
  49. {
  50.     pNODE head = CreateCirculationLinkList();
  51.     WhoWillSurvive(head, 3);
  52.     system("pause");
  53.     return 0;
  54. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

insert用来插入链表,插入42个链表,然后报数到3删除 不知道程序改怎么编
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

你上面做的是循环链表吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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



小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-5 18:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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