2012-04-18 9 views
-1

基本的には、配列はユーザ​​ー入力で初期化する必要があります。 input = 3場合、それはあなたが家庭の仕事を言うことができる...この配列は、それぞれのインデックス0,1,2に(そう、合計3個のリスト)cでリンクリストノードの動的配列を作成する方法は?

int input = 3; 
list* array[n]//not allowed as n is not constant, also not in heap so can't pass it across functions 
list* array[] = (list*) malloc(sizeof(list)*input)//compiler error 

面接の準備を1つのリンクリストを格納することができますを意味します!

+0

質問とコードは互いに矛盾します。あなたはリストのセットまたはリストノードのセットを動的に割り当てたいですか? – Christoffer

+0

リンクされたリストの配列.... array [0]はlistAを持ち、array [1]はlistBを指しています。言い換えれば、配列の配列の代わりに、私はリンクされたリストの配列が必要です。しかし、配列のサイズはユーザーの入力によって決定されなければなりません –

答えて

0

list* array = malloc(sizeof(list) * input)である必要があります。mallocは、新しく割り当てられたメモリロケーションのベースアドレスを返します。これを配列として使用すると、array[0]..array[input - 1]にアクセスできます。

+0

しかし、配列は実際にはこの多くのメモリが割り当てられたリンクリストにすぎませんか?どのように私はそれが賢明なインデックスにアクセスするだろうか? –

+0

oh ok ..このコードを試してみてください! –

0

(シングル)リンクリストは、しばしば次の構造体へのポインタを持つ構造体です。このパターンは、そのリストからのものの追加、削除、および挿入を容易にし、実行時に全データの使用を柔軟に管理します。あなたの状況で

リンクリストは、その後、あなたは、各リストを追跡するための機能を追加することができ、この

struct List 
{ 
// contents of the list 
List* Pointer_to_next_list; 
}; 

のようになります。私はこれがどのように動作するかについて、Wikipedia::Linked Listを読むことをお勧めします。

1

リンクされたリストの配列は、(標準のリンクされたリストの実装を前提とした)ヘッドノードの配列か、リストへのポインタの配列のいずれかです。どちらの場合でも、あなたが直面しているように見える問題は、配列を動的に割り当てる方法です。

動的ヒープ上の配列を割り当てるための一般的な構文は、あなたのコード内でコンパイルエラーを修正するため

int input = 3; 
list ** array = calloc(input, sizeof(list*)); 

だろう

type * array = calloc(number_of_elements, sizeof(type)) 

であるあなたが探しているものを、このですか?

関連する問題