代码-C++单循环链表约瑟夫问题

问题描述

C++单循环链表约瑟夫问题

#include

using namespace std;

class Node
{
public:

Node *next;

char *name;
char *number;
char *sex;
char *age;
char *banji;
char *heal;
/*void input()
{
cin>>name;
cin>>number;
cin>>sex;
cin>>age;
cin>>banji;
cin>>heal;

}
void output()
{
    cout<<name<<" "<<number<<" "<<sex<<" "<<age<<" "<<banji<<" "<<heal<<endl;
}
*/

};
class linklist
{
public:
Node *head;
int n;

linklist()
{
    head=new Node ;
    head->next=NULL;
}
void input3()
{

    Node *t=head;
    Node *q;
    for(int i=0; i<n; i++)
    {
        q=new Node;
        t->next=q;

cin>>q->name>>q->number>>q->sex>>q->age>>q->banji>>q->age>>q->banji>>q->heal;
q->next=NULL;

        t=q;
    }
    q->next=head->next;

}

void johesu(linklist a)
{
    Node *p=a.head->next,*q=a.head->next;
    while(q&&q!=q->next)
    {
        int i=1;
              cin>>n;
        for( i=1; i<n; p=q,q=q->next)
            i++;
        cout<<q->name<<" "<<q->number<<" "<<q->sex<<" "<<q->age<<" "<<q->banji<<" "<<q->age<<" "<<q->banji<<" "<<q->heal<<endl;
        p->next=q->next;
        delete q;
        q=p->next;

    }
    a.head=NULL;

}

};
int main()
{
linklist a;

int m,n,i;
cin>>m;
a.n=m;
a.input3();
a.johesu(a);

}
请大神指出我的代码错误,本人新手,不喜勿喷。。我只是想不断改正自己的代码,发现自己的问题。谢谢!!!!

解决方案

不知道楼主问题解决了没有,前天看得太粗,没有找出问题。今天找到问题了。你之所以输入崩溃是因为你输入的数据没有地方存储,所以崩溃。你在input3()函数中用了q=new node;开创建一个节点,这一句的执行效果是:在计算机内存中申请到了一块内存空间,这块空间大小共7个字节,并且返回了这块空间第一个字节的地址,赋值给了指针变量q。之所以这样,是因为你在node类的定义中,定义了7个指针,分别是next,name,number,sex,age,banji和heal。这7个只是指针变量,它们并没有对应内存空间,所以,在后面input3()函数中,你在需要输入数据的时候,系统发现你输入的数据没有地方存储,也就是说执行cin>>name >>number…的时候,name,number等是没有初始化的指针,它们所指向的内存空间可能不存在或者是系统正在使用的内存空间,这是非常危险的。

修改的方法:
第一,你可以在node类的定义中将name,number等变量(除了next变量)定义为字符串类型,或者字符数组类型,而不是像你原来的指针类型;
第二种方法,你可以在node类中添加构造函数,在构造函数中用new运算符为name等的6个指针申请字符串型的内存空间;
第三种方法,你可以在input3()函数中,在cin语句之前,逐一为name等六个指针用new申请字符串类型内存空间,然后再是cin输入语句。

推荐第一和第二种方法。
希望可以帮到楼主。

解决方案二:

你这个johesu函数作用是将链表倒序输出吗?我理解为你是在倒序输出,而且在每次输出一个节点之后,将该节点析构。在倒序输出的时候,你的for循环中每次都循环n-1次,这是不对的,这样输出的结果是乱序的。你for循环每次应该循环的是上一次输出的时候的那个循环中的循环次数减1次。即,假如你共有5个节点。第一次你应该循环4次,输出第5个节点,然后将第5个节点析构,然后for循环3次,因为这次你总共只有4个节点了,然后输出、析构,然后循环2次,输出、析构。就这样依次类推

解决方案三:

代码太长,我还没看,首先说一下,你这include预编译命令后面什么都没有是几个意思?先把这个改了再说吧

解决方案四:

单链表,单循环链表,约瑟夫问题
(1.2.1.3)单循环链表和约瑟夫问题
循环双向链表 及 约瑟夫问题的解决

解决方案五:

不知道楼主问题解决了没有,前天看得太粗,没有找出问题。今天找到问题了。你之所以输入崩溃是因为你输入的数据没有地方存储,所以崩溃。你在input3()函数中用了q=new node;开创建一个节点,这一句的执行效果是:在计算机内存中申请到了一块内存空间,这块空间大小共7个字节,并且返回了这块空间第一个字节的地址,赋值给了指针变量q。之所以这样,是因为你在node类的定义中,定义了7个指针,分别是next,name,number,sex,age,banji和heal。这7个只是指针变量,它们并没有对应内存空间,所以,在后面input3()函数中,你在需要输入数据的时候,系统发现你输入的数据没有地方存储,也就是说执行cin>>name >>number…的时候,name,number等是没有初始化的指针,它们所指向的内存空间可能不存在或者是系统正在使用的内存空间,这是非常危险的。

修改的方法:
第一,你可以在node类的定义中将name,number等变量(除了next变量)定义为字符串类型,或者字符数组类型,而不是像你原来的指针类型;
第二种方法,你可以在node类中添加构造函数,在构造函数中用new运算符为name等的6个指针申请字符串型的内存空间;
第三种方法,你可以在input3()函数中,在cin语句之前,逐一为name等六个指针用new申请字符串类型内存空间,然后再是cin输入语句。

推荐第一和第二种方法。
希望可以帮到楼主。

解决方案六:

不知道楼主问题解决了没有,前天看得太粗,没有找出问题。今天找到问题了。你之所以输入崩溃是因为你输入的数据没有地方存储,所以崩溃。你在input3()函数中用了q=new node;开创建一个节点,这一句的执行效果是:在计算机内存中申请到了一块内存空间,这块空间大小共7个字节,并且返回了这块空间第一个字节的地址,赋值给了指针变量q。之所以这样,是因为你在node类的定义中,定义了7个指针,分别是next,name,number,sex,age,banji和heal。这7个只是指针变量,它们并没有对应内存空间,所以,在后面input3()函数中,你在需要输入数据的时候,系统发现你输入的数据没有地方存储,也就是说执行cin>>name >>number…的时候,name,number等是没有初始化的指针,它们所指向的内存空间可能不存在或者是系统正在使用的内存空间,这是非常危险的。

修改的方法:
第一,你可以在node类的定义中将name,number等变量(除了next变量)定义为字符串类型,或者字符数组类型,而不是像你原来的指针类型;
第二种方法,你可以在node类中添加构造函数,在构造函数中用new运算符为name等的6个指针申请字符串型的内存空间;
第三种方法,你可以在input3()函数中,在cin语句之前,逐一为name等六个指针用new申请字符串类型内存空间,然后再是cin输入语句。

推荐第一和第二种方法。
希望可以帮到楼主。

时间: 2024-10-30 12:53:16

代码-C++单循环链表约瑟夫问题的相关文章

单链表-创建单循环链表的双指针问题

问题描述 创建单循环链表的双指针问题 解决方案 你代码贴的不全,也没有看出你要问的问题~感觉你链表节点用的单指针吧,结构体节点里只有next指针~这里的三个结构体指针:la:头结点:p:临时节点,暂存新开辟的内存节点:q:作为链表的一个游标指针,遍历链表~

在长度大于1的单循环链表中既无头结点也无头指针s为指向某个结点的指针编写算法删除结点*s的前驱结点

问题描述 在长度大于1的单循环链表中既无头结点也无头指针s为指向某个结点的指针编写算法删除结点*s的前驱结点 如链表中为(12345),用户输入1,则结果应为(1,234).这种情况实现不了,求大神解答 #includeusing namespace std;typedef struct LNode{ int data; struct LNode *next; }LNode*LinkList;void begin(LinkList &l){ l=new LNode; l->next=NULL

android内核的lk代码中构造器链表在哪?

问题描述 android内核的lk代码中构造器链表在哪? 在LK的 main.c的kmain中: call_constructors()操作执行__ctor_list链表里面的func,在代码中没有找到__ctor_list的定义在哪?求定义__ctor_list的代码路径? 解决方案 http://blog.csdn.net/hellowxwworld/article/details/11093853 解决方案二: 你的回答一点也不沾边啊~~~不过我自己解决了,就采纳你的好了--------在

单链表、单循环链表和双向链表概念就是混

问题描述 单链表.单循环链表和双向链表概念就是混 对于单链表.单循环链表和双向链表,如果仅仅知道一个指向链表中某个节点链表的指针P,能否将P所指结点的数据元素与其确实存在的直接前驱?请对每一中链表作出判断,若可以,写出程序段:否则说明理由. 单链表和循环链表的结点结构为: 双向链表的结点结构为: 解决方案 只有双向链表才可以直接得到前驱.单链表和单循环链表都不可以. 单链表 struct Node { int value; Node * next; } 双向链表 struct Node { in

用单循环链表存储一个环上的数据,并计算任意两个相邻元素之差是否超过2

#include<iostream.h> #include<stdlib.h>   typedef struct node{   int  data;  struct node *next; }Lnode,*LinkList;   //假设下面的单循环链表均为带头结点,而且L指向尾结点.   void CreatLinkList(LinkList &L) {//建立一个单循环链表L,数据为整数,数据由键盘随机输入.  int i;  LinkList head;  L=(L

Java单循环链表解约瑟夫问题

问题描述 约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列.packagecom.tly.java;/****单向循环列表*/publicclassCircleLinkedList<E>{privateNode<E>head;privateintsize;//thelengthofthelistpublicCircleL

c语言-关于C语言链表的一些问题,代码怎么都运行不成功跪求大神指点

问题描述 关于C语言链表的一些问题,代码怎么都运行不成功跪求大神指点 下面代码主要实现链表的创建,插入,删除,并且能将两个年龄递增链表进行合并成递减链表 然而在插入和删除操作中gets函数无法起作用,strcmp函数也出现位置冲突报错..功力不足实在解决不了..跪求大神解答..(感觉自己写的东西除了上面两个错误应该还有,但是因为位置冲突问题就只能编译到那个地方无法进行下去..我肉眼实在找不出来.. #include<stdio.h> #include<stdlib.h> #incl

php实现单链表的实例代码_php实例

复制代码 代码如下: <?php //链表节点 class node {     public $id; //节点id     public $name; //节点名称     public $next; //下一节点         public function __construct($id, $name) {         $this->id = $id;         $this->name = $name;         $this->next = null;  

视频-c#链表问题,包括最基础的单链表双链表以及循环链表的使用

问题描述 c#链表问题,包括最基础的单链表双链表以及循环链表的使用 新手,最近在学c#,请问有谁知道关于链表的视频,包括单链表,单循环链表,双循环链表等等,从链表最基础的开始讲的视频,里面介绍使用链表最基础的代码,谢了谢了!