0

リンクリストを作成して表示するプログラムを作成しようとしています。

create_list()関数で問題が発生しましたが、リストが作成されません。

私が間違っているのは何ですか?

悪い英語でごめんなさい:/

コード:

#include <stdio.h>
#include <stdlib.h>

typedef struct node {
    int data;
    struct node *next;
} node;

int main(){

     node *start;
     start = NULL;
     int a,n,on = 1;

     while(on == 1){
        printf(" \n choose: \n 1 --- create list \n 2 --- display list \n");
        scanf("%d",&n);
        switch(n){
            case 1:
                printf("-------------------------------------------- \n");
                printf(" Enter the elements. The last element is 0 \n");
                printf("-------------------------------------------- \n");

                Create_list();
                Display_list(start);
                break;

            case 2:
                 Display_list(start);
                break;
        }
    }

    system("pause");
    return 0;
}

void Display_list(node *curr){
    if(curr){
        while (curr->next != NULL){
                  printf("%d \n",curr->data);
                   curr=curr->next;
        }
    } else {
        printf(" \n The list is not created ! \n");
    }
}

void Create_list(node *curr){

    int i;
    node *start = NULL;



    if (start == NULL){
        curr = (node *)malloc(sizeof(node));
        start=curr;

       while ( i != 0){
            scanf("%d",&i);
            if(i == 0){
                curr->next=NULL;
                curr=start;
            } else {
                curr->data=i;
                curr->next=(node *)malloc(sizeof(node));
                curr=curr->next;
            }
        }

    } else {
          printf(" \n list already exists ! \n");
    }
}                     
4

2 に答える 2

1

関数 Create_List(node *curr) にはいくつかの引数が必要です。main() から引数を渡していません。コードはコンパイルされましたか?

関数 Create_List(node *curr) にはいくつかの引数が必要です。main() から引数を渡していません。コードはコンパイルされましたか?

あなたがすべきことは、リンクされたリストの最初のノードの場所を格納するメインのノードを取ることです。

void Insert(struct node **q, int num) //Num is the data to be added and **q is the pointer to the first node of the list.
{
struct node *temp, *r;
temp = *q;
if (*q == NULL) {
    temp = ((struct node *)malloc(sizeof(struct node)));
    temp->data = num;
    temp->link = NULL;
    *q = temp;
}
else    {
    while (temp->link != NULL)
        temp = temp->link;

    r = ((struct node *)malloc(sizeof(struct node)));
    r->data = num;
    r->link = NULL;
    temp->link = r;
}
}
于 2013-03-11T13:43:28.327 に答える
0

startinはinCreate_listとは関係ありません。どちらもそれぞれの機能に対してローカルであるため、一方が他方を見ることさえできません。したがって、設定は実際には設定されません。:Pstartmainstartstart

関数の外に持ってきstartてグローバルにするか、&start( としてnode**) からmainに渡しCreate_list、変更*startしてリスト ヘッドを設定する必要があります。(グローバルは発生するのを待つのが面倒なことが多いため、一般的には後者が望ましいです。)

于 2013-03-11T13:41:59.927 に答える