一方向チェーンテーブルの作成

3494 ワード

C言語でstructでチェーンテーブルを作成し、プロセスがどのようになっているかを見てみましょう.
#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を指すことを忘れないでください.