程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 代碼-C++單循環鏈表約瑟夫問題

代碼-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輸入語句。

推薦第一和第二種方法。
希望可以幫到樓主。圖片說明圖片說明圖片

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved