从文件导入数据建立一个链表,实现学生信息的增,删,查,取功能
链表的建立分为头插和尾插,头插数据读取顺序与插入顺序相反。尾插读取顺序与插入顺序相同。
具体代码如下:
尾插法:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#include<errno.h>
#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!!!\n");
printf("error:%s\n", 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成绩\n");
while ( p->next )/*当循环条件是p时,因为头节点数据