2

newList で間違っていると思います。Typedef 構造体の実装を変更してはなりません。これは私の学校での実験課題です..よろしくお願いします:)

#include<stdio.h>

    typedef struct node *nodeptr;
    struct node {
    int item;
    nodeptr next;
};
typedef nodeptr List;


List newList(); 

newList はヘッダーを作成し、ヘッダー ノードへのポインターを返します。

void display(List list);
void addFront(List list, int item);

List newList(){
    List list;
    list=(nodeptr)malloc(sizeof(List));
    list->next=NULL;
    return list;
} //I think my new list is incorrect..
void display(List list){
    nodeptr ptr=list;
    while(ptr!=NULL){
        printf("%d",ptr->item);
        ptr=ptr->next;
    }
    printf("\n");
}
void addEnd(List list, int item){
    nodeptr temp, ptr;
    temp=(List)malloc(sizeof(nodeptr));
    temp->item=item;
    temp->next=NULL;
    if(list->next==NULL)
        list=temp;
    else{
        ptr=list;
        while(ptr->next!=NULL)
            ptr=ptr->next;
        ptr->next=temp;
    }

}

リストから10を追加できないようです..

int main(void){
    List list=newList();
    addEnd(list,10);
    display(list);
}
4

1 に答える 1

5

実際に必要なものに応じて、さまざまな方法があります (ノードを作成するだけでは意味がありません)。ただし、一般的には、スタック上に作成する、グローバル メモリ内にそのノードを作成する、または動的に割り当てるという 3 つの一般的なオプションがあります。以下にいくつかの例を示します。

スタック上

#include <stdlib.h>

struct node {
    int item;
    struct node *next;
};

int main()
{
    struct node head;
    head.item = 0;
    head.next = NULL;
    /* Do something with the list now. */
    return EXIT_SUCCESS;
}

グローバル メモリ内

#include <stdlib.h>

struct node {
    int item;
    struct node *next;
};

static struct node head;

int main()
{
    /* Do something with the list now. */
    return EXIT_SUCCESS;
}

ダイナミック アロケーション

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

struct node {
    int item;
    struct node *next;
};

int main()
{
    struct node *head;

    head = calloc(1, sizeof(struct node));
    if (head == NULL) {
        perror("calloc");
        return EXIT_FAILURE;
    }
    /* Do something with the list now. */
    return EXIT_SUCCESS;
}

上記の例は、C の入門書で読むことができます。

それが役に立てば幸い。幸運を!

于 2013-02-27T14:26:16.610 に答える