>あとstruct dataのメンバは3つだけど、struct data型の引数は3つですよね?
>これもOKなんでしょうか?

headとpとqのことかな?大丈夫だよ。
これは単にmallocで作ったデータの住所を保持してるだけだから。
このプログラムを実行すると
[]→[]→[]→[]→[]→[]→NULL
↑
head
という構造ができて、その先頭のオブジェクトの住所がどこかを記憶してるのが
headというポインタ変数。だから、
struct data *temp;
だけだと、tempは何も指さないNULLデータ。
mallocでオブジェクトを生成させると、そのオブジェクトの住所が入る。
で、temp=head->next;とすると、
[]→[]→[]→[]→[]→[]→NULL
↑ ↑temp
head
となって、headの次のオブジェクトにアクセスできるようになる。