次のCコードは、私自身のプリミティブリンクリストを書く方法です。これはlnodeという構造体を使用します。私はこれが最高の/最も効率的な方法ではないことを知っているが、私のアイデアはこれです:ベースノードを作成し、リスト内の最後のノードを指し示す "iterator"ポインタ(ここではq)を使い、 。C LinkedListの例がコンパイルされない
次のコードはコンパイルされません。私は原因を見つけることができませんが、この行が嫌いです
struct lnode *q= malloc(sizeof(struct lnode));
このアイデアを作るためのアドバイスはありますか?前もって感謝します。
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
struct lnode{
int value;
struct lnode *nextnode;
};
int main(){
struct lnode *startnode = malloc(sizeof(struct lnode));
startnode->value=0;
startnode->nextnode=NULL;
struct lnode *q= malloc(sizeof(struct lnode));
int i = 0;
for(i=0;i<10;i++){
struct lnode *p = malloc(sizeof(struct lnode));
p= q->nextnode;
p->value=i;
p->nextnode=NULL;
q=p;
}
return 0;
}
私は初心者だと指摘したいと思います。私はWatcomコンパイラを使用しています(なぜですか?私のコンピュータは古く、これらすべての練習用ポログラムに必要です)。ログ出力は
structure1.c(17)です。 E1063:欠落しているオペランドstructure1.c(17):
警告! W111:意味のない式の使用structure1.c(17):
エラー! E1009:期待する ';' 'struct' structure1.c(17)が見つかりました:
エラー! E1011:シンボル 'lnode'は宣言されていません。structure1.c(17):
エラー! E1011:シンボル 'q'は宣言されていません。structure1.c(17):
エラー! E1014:左オペランドは「左辺値」structure1.c(19)でなければなりません:
私は与えられたアドバイスに従って、新しいコードはこれですコードを変更:
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
struct lnode{
int value;
struct lnode *nextnode;
};
int main(){
struct lnode *startnode = (struct lnode *)malloc(sizeof(struct lnode));
struct lnode *q;
startnode->value=0;
startnode->nextnode=NULL;
q = malloc(sizeof(struct lnode));
doLoop(q);
return 0;
}
void doLoop(struct lnode *q){
int i = 0;
for(i=0;i<10;i++){
struct lnode *p = (struct lnode *)malloc(sizeof(struct lnode));
q->nextnode=p;
p->value=i;
p->nextnode=NULL;
printf("%i, %i\n",p->value,q->value);
q=p;
}
}
私は「値を印刷リスト内の各ノードの値を以前の値とともに更新します。それは奇妙な出力を与える最初の反復を除いて動作します。
あなたは、コンパイラから取得するエラーメッセージは何ですか:
ので、おそらく何かのように、それを合計するには? – Jesper
それはGCCで私のためにうまくコンパイルします –
malloc()の戻り値をキャストしてイエスの愛のためにしないでください! –