数据结构:循环单向链表——约瑟夫环

来源:互联网 发布:什么是淘宝类目搜索 编辑:程序博客网 时间:2024/05/16 17:40

数据结构要求写一个用单向循环链表存储的约瑟夫环,原题如下:编号1,2,3......,n的n个同学按顺指针方向围坐一圈,每人持有一个密码(正整数),开始选一个上报数m,从第一个人开始报数,直到报到m,然后这个人出列,再将这个人的密码当成新的m,并从他的下一位同学开始从一数。直到全部出列。

然后自己就苦逼的想啊想。

代码如下:

#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1#define ERROR 0 #define OVERFLOW -2typedef int status;typedef int Number;typedef int ElemType;typedef struct Node{ElemType data;Number num;struct Node *next;}LNode, *LinkList;       //Linklist 头结点  wsm要带*   ????????????????????//----------------------创建循环链表-------------------status InitList(LinkList &L, ElemType n)//建立循环链表  {  LNode *p,*q;int i;L = NULL;for(i = n;i >= 1;i --){p =(LNode *)malloc(sizeof(LNode));if(p == NULL)return OVERFLOW;printf("请输入第%d个人的密码:",i);scanf("%d",&p ->data);p->num = i;p->next = L;L = p;if (i == n)q = p;}q->next = L;}  //------------------------删除元素-----------------------status ListDelete(LinkList &L,int i,ElemType &e){int j = 1;LNode *q, *p = L;while(j < i - 1){p = p->next;++j;}if(!p->next||j>i - 1)return ERROR;q = p->next;p->next = q->next;printf("%d",q->num);e = q->data;free(q);if(e != 1)L = p->next;elseL = p;return OK;}//——----------------------考虑是1的这种情况------------status ListDelete1(LinkList &L,ElemType &e){LNode *q, *p = L;if(!p->next)return ERROR;q = p->next;p->next = q->next;printf("%d",q->num);e = q->data;free(q);L = p->next;return OK;}int main(){LinkList L;int n,m,i;LNode e;printf("请输入围成圈的总人数n:");scanf("%d",&n);InitList(L,n);printf("请输入报数上限值m:");scanf("%d",&m);printf("输出顺序如下:");for(i = 0;i < n;i ++){if(m != 1)ListDelete(L,m,m);else ListDelete1(L,m);}return OK;}

可以直接试一下:   数据    n = 7 然后密码顺序:4,8,4,2,7,1,3  m = 20   则若运行结果为:6,1,4,7,2,3,5  就正确。


总结:1.自己的指针这一块非常薄弱。一定要在学习学习。

   2.要养成多调试的习惯。像高鑫学习。高鑫真的太厉害了。我纠结很久的问题。他轻松解决。佩服。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 饥荒渡渡鸟死了一只怎么办 饥荒电脑联机植物生病怎么办 开车蹭到别人车怎么办 立定跳不会收腹怎么办 1岁宝宝有蛔虫怎么办 手机屏幕总是有网页跳出来怎么办 cs游戏屏幕变成正方形怎么办 大王卡被收回了怎么办 模拟人生4小人生病了怎么办 创造与魔法死后怎么办? 脚不小心扭伤了该怎么办 小鸡脚扭伤了该怎么办 跳高比赛最终成绩相等怎么办 热车1200怠速降不下来怎么办 大腿根骨髓水肿越来越疼怎么办 倒库方向打晚了怎么办 签吻芳颜祛斑液脸脱皮怎么办 3d右边工具栏消失了怎么办 3d菜单栏消失了怎么办 觉得自己性无能不敢谈对象怎么办 护士面试时被问到病人坠床怎么办 三次元仪器坏了怎么办 运动同手同脚怎么办 狗狗突然害怕不敢走路怎么办 一岁半宝宝因为害怕不敢走路怎么办 猫把背拱起来怎么办 穿猫跟鞋走路不稳怎么办 狗狗后腿内八字怎么办 快走后小腿粗了怎么办? 猫的嘴巴烂了怎么办 苹果8丢了已关机怎么办 肚子吃多了难受怎么办 喝水喝的肚子胀怎么办 肚子吃撑了难受怎么办 肚子撑得想吐怎么办 吃饭吃的太饱怎么办 吃饭吃的太撑怎么办 跑步迈不开步子怎么办 踏步走步子反了怎么办 微信不支持计步怎么办 肝癌二次介入后头晕心慌怎么办