一方向チェーンテーブルの作成
3494 ワード
C言語でstructでチェーンテーブルを作成し、プロセスがどのようになっているかを見てみましょう.
ここでは、任意のノードを作成できるチェーンテーブルです.C言語ではチェーンテーブルがstructで作成されていることを知っています.まず、各ノードを線のように接続するデータと構造体ポインタを格納する構造体を定義します.チェーンテーブルを作成するプロセスを関数に配置します.まず、関数で変数を直接定義するのではなく、mallocで空間を申請することに注意します.そうしないと、エラーが発生します.ここでは3つのポインタを定義し,headはヘッダノードを格納するポインタであり,Ptは新しいノードを格納するポインタであり,prePtは現在のチェーンテーブルの末尾ノードを格納するポインタである.ヘッドノードには前駆ノードがないので、ヘッドノードは単独で取り出します.申請した空間が正しければ,ノードのアドレスをPtに返す.一方、prePtは、常に現在のチェーンテーブルの末尾ノードのアドレスを保存するために使用され、ヘッダノードが1つしかないため、Ptの値をprePtに付与する.次に、ヘッダノードを除く他のノードの作成です.手順はあまり悪くありません.重要な点は、prept->nextが新しいノードのアドレスを格納しているため、新しいノードPtのアドレスをprept->nextに割り当て、その後、prepPtの値をPtに更新することである.Ptは変化しているため、prepPtも追随しなければならない.作成が完了したら、最後のノードのnextがNULLを指すことを忘れないでください.
#include
#include
typedef struct player
{
int account;
char name[20];
int HP;
int power;
int intelligence;
struct player *next;
}PLAYER;
PLAYER *Build(int num)
{
int i = 0;
PLAYER *Pt,*prePt,*head;
Pt = (PLAYER *)malloc(sizeof(PLAYER));
if(Pt != NULL)
{
scanf("%d%s%d%d%d",&Pt->account,Pt->name,&Pt->HP,&Pt->power,&Pt->intelligence);
head = Pt;
prePt = Pt;
}
else
{
printf("Failed.
");
exit(0);
}
for(i = 1;i < num;i++)
{
Pt = (PLAYER *)malloc(sizeof(PLAYER));
if(Pt != NULL)
{
scanf("%d%s%d%d%d",&Pt->account,Pt->name,&Pt->HP,&Pt->power,&Pt->intelligence);
prePt->next = Pt;
prePt = Pt;
}
}
Pt->next = NULL;
return head;
}
int main()
{
PLAYER *head;
head = Build(3);
printf("The second player is:%d",head->account);
return 0;
}
ここでは、任意のノードを作成できるチェーンテーブルです.C言語ではチェーンテーブルがstructで作成されていることを知っています.まず、各ノードを線のように接続するデータと構造体ポインタを格納する構造体を定義します.チェーンテーブルを作成するプロセスを関数に配置します.まず、関数で変数を直接定義するのではなく、mallocで空間を申請することに注意します.そうしないと、エラーが発生します.ここでは3つのポインタを定義し,headはヘッダノードを格納するポインタであり,Ptは新しいノードを格納するポインタであり,prePtは現在のチェーンテーブルの末尾ノードを格納するポインタである.ヘッドノードには前駆ノードがないので、ヘッドノードは単独で取り出します.申請した空間が正しければ,ノードのアドレスをPtに返す.一方、prePtは、常に現在のチェーンテーブルの末尾ノードのアドレスを保存するために使用され、ヘッダノードが1つしかないため、Ptの値をprePtに付与する.次に、ヘッダノードを除く他のノードの作成です.手順はあまり悪くありません.重要な点は、prept->nextが新しいノードのアドレスを格納しているため、新しいノードPtのアドレスをprept->nextに割り当て、その後、prepPtの値をPtに更新することである.Ptは変化しているため、prepPtも追随しなければならない.作成が完了したら、最後のノードのnextがNULLを指すことを忘れないでください.