C言語はファイルから情報を導入してリンクを作成します.


ファイルからデータを導入してチェーンを作って、学生の情報の増加を実現して、削除して、調べて、機能のチェーンの創立を取って頭と尾に分けて挿し込んで、頭はデータの読み取りの順序と挿入の順序が相反します.補間読取順序は挿入順序と同じです.具体的なコードは以下の通りです.
#include
#include
#include
#include
#include

#define OK 1
#define ERROR 0

typedef struct {
     
	char name[8];
	int id;
	int score;
} student;

typedef struct LNode {
     
	student date ;
	struct LNode *next;
} LNode, *Linklist;

チェーンブロックを初期化する

int Openfile ( Linklist L )
{
     
    char n[8];
    int t, s;
    Linklist p, newn;
    p = L;   /*        */
    FILE *r;
    if ( ( r = fopen ("as.txt", "r" ) ) == NULL ) {
     
		printf("can't open the file!!!
"
); printf("error:%s
"
, strerror(errno)); exit(0); } while ( fscanf ( r, "%s%d%d", n, &t, &s ) != EOF ) { newn = ( LNode * ) malloc ( sizeof ( LNode ) ); strcpy ( newn -> date.name, n );/* strcpy()*/ newn -> date.id = t; newn -> date.score = s; newn->next=NULL; /* */ p->next=newn; /* ( ) */ p=newn; /* */ } fclose(r); }
印刷

void PrintList (Linklist L) {
     
    Linklist p;
    p=L;
    printf("  \t\t\t\t  \t\t\t\t  
"
); while ( p->next )/* p , */ { printf("%s\t\t\t\t%d\t\t\t\t%d
"
,p->next->date.name,p->next->date.id,p->next->date.score); p = p -> next; } printf("
"
); }
挿入を削除

int ListDelete ( Linklist L ) {
     

    int i, j = 0;
    Linklist p, r;
    p = L;
    printf("          
"
); scanf("%d", &i); while (p->next!=NULL&&j<i-1) { p = p->next; j++; } if ((j!=i-1)||(p->next==NULL)){ printf("
"
); return ERROR; } r = p->next; p->next=r->next; free(r); return OK; } int ListInsert(Linklist L ) { Linklist p,newn; int k,j=0; student s; p=L; printf("
"
); scanf("%d",&k); while(p!=NULL&&j<k-1) { p=p->next; j++; } if((j!=k-1)||(p==NULL)) { printf(" "); return ERROR; } printf("================ ==============
"
); printf("***** :"); scanf("%s",s.name); printf("***** :"); scanf("%d",&s.id); printf("***** :"); scanf("%d",&s.score); printf("

"
); newn=(LNode*)malloc(sizeof(LNode)); newn->date= s ; newn->next=p->next; p->next=newn; return OK; }
調べ取る

int Locate(Linklist L){
     
    int s;
    printf("      
"
);/* error: stray '\243' in program| */ scanf("%d",&s); /* */ Linklist p; p=L->next; while(p) { if(p->date.id==s) printf(" :%d

"
,p->date.score); p=p->next; } return ERROR; } int GetElement(Linklist L){ int i,j=1; Linklist p; p=L->next; printf("
"
); scanf("%d",&i); while(p&&j<i) { p=p->next; ++j; } if(!p||j>i) return ERROR; printf("
"
); printf("***** :%s
"
,p->date.name); printf("***** :%d
"
,p->date.id); /*printf */ printf("***** :%d
"
,p->date.score); return OK; }
メイン関数

void main()
{
     
    Linklist L;
	L = ( Linklist ) malloc ( sizeof ( Linklist ) );
	L -> next = NULL;

    Openfile(L);
    PrintList(L);

    ListInsert(L);
    PrintList(L);

    ListDelete(L);
    PrintList(L);

    Locate(L);
    GetElement(L);
}
前挿法でチェーンブロックを作成する部分コードは以下の通りです.
int Openfile ( Linklist L )
 {
     
    char n[8];
    int t, s;
    Linklist p, newn;
    p = L;
    FILE *r;
    if ( ( r = fopen ("as.txt", "r" ) ) == NULL )
    {
     
		printf("can't open the file!!!
"
); printf("error:%s
"
, strerror(errno)); exit(0); } while ( fscanf ( r, "%s%d%d", n, &t, &s ) != EOF ) { newn = ( LNode * ) malloc ( sizeof ( LNode ) ); strcpy ( newn -> date.name, n ); newn -> date.id = t; newn -> date.score = s; newn -> next = p -> next; p -> next = newn; } fclose(r); }