1

したがって、リンクリストスタックの一番上に新しい値をプッシュするこのプッシュ関数が正しいかどうか疑問に思っています

void push(node** hd, int v){
node temp;
temp = (node*)malloc(sizeof(node));
temp -> val = v;
temp -> next = *hd;
*hd = temp;

}

前もって感謝します!

また、最後にプッシュされた値をスタックからポップするために、どのようにポップ関数を作成するのか疑問に思っています。

ちなみに構造体コードはこんな感じです...

typedef struct nodeStruct
{
int val;
struct nodeStruct* next;
}node;

typedef node* list;
4

1 に答える 1

2

ポインタタイプを定義しないでください。彼らは混乱しています。通常の型を定義し、それを明示的に逆参照します。これが、ポインタ型なしでやろうとしていたことです。

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

typedef struct nodeStruct
{
    int val;
    struct nodeStruct *next;
} node;

static void push(node **head, int v)
{
    node *temp = malloc(sizeof(node));
    temp->val = v;
    temp->next = *head;
    *head = temp;
}

int main(int argc, char **argv)
{
    (void) argv;
    (void) argc;
    node *list = NULL;

    for (int i=0; i<10; ++i) {
        push(&list, i);
    }
    for(node *l = list; l != NULL; l = l->next) {
        printf("%d ", l->val);
    }
    printf("\n");
    return 0;
}

の失敗をチェックする必要があることに注意してくださいmalloc。言い換えれば、mallocNULLを返すことができます。これは処理する必要があります-あなたに任せてください。

于 2012-11-05T23:38:58.850 に答える