![](https://i-blog.csdnimg.cn/direct/3417d4afa472443499c562d940e78649.jpeg)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;
typedef struct Student
{
char name[20];
int chinese;//语文成绩
int math;
int english;
int physical;
int chemical;
int biological;
}stu_t;
typedef struct Node
{
union
{
int len;
stu_t data;
};
struct Node *next;
}linklist,*linklistPtr;
//创建头节点
linklistPtr create()
{
linklistPtr p = (linklistPtr)malloc(sizeof(linklist));
if(NULL == p)
{
printf("创建失败!\n");
return NULL; //因为定义了指针p,但是p指向的那片空间没申请成功,要避免野指针,所以要指向NULL,所以返回一个NULL。
}
printf("创建成功!\n");
p->len = 0; //数据段置0
p->next = NULL; //指针段指向NULL
return p;
}
//创建新节点
linklistPtr getnode(stu_t data)
{
linklistPtr p = (linklistPtr)malloc(sizeof(linklist));
if(NULL == p)
{
printf("内存申请失败");
return NULL;
}
p->data = data;
p->next = NULL; //将指针段存放a的地址
return p; //返回指针p
}
//头插
int headi(linklistPtr p,stu_t a)
{
if(NULL == p)
{
printf("头插失败!\n");
return 0;
}
linklistPtr p1 = getnode(a);
p1->next=p->next; // 将头指针的指向 给插入的新节点。
p->next=p1; // 再将头指针指向新节点
p->len++; // 长度自增
return 1;
}
int main(int argc, const char* argv[]) {
FILE* fp = fopen("./stu.txt","w");
linklistPtr p =create(); //头节点
stu_t str[5]=
{
{"张大",10,100,100,1,100,100},
{"张二",20,100,100,1,100,100},
{"张三",30,100,100,1,100,66},
{"张四",40,100,100,1,100,77},
{"张五",50,100,100,1,100,88}
};
for(int i=0;i<5;i++)
{ headi(p,str[i]);
}
linklistPtr p1 = p;
for(int i=0;i<p->len;i++)
{
p1=p1->next;
fprintf(fp,"%s %d %d %d %d %d %d\n",p1->data.name,p1->data.chinese,p1->data.math,p1->data.chemical,p1->data.physical,p1->data.biological,p1->data.english);
}
fclose(fp);
return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;
typedef struct Student
{
char name[20];
int chinese;//语文成绩
int math;
int english;
int physical;
int chemical;
int biological;
}stu_t;
typedef struct Node
{
union
{
int len;
stu_t data;
};
struct Node *next;
}linklist,*linklistPtr;
//创建头节点
linklistPtr create()
{
linklistPtr p = (linklistPtr)malloc(sizeof(linklist));
if(NULL == p)
{
printf("创建失败!\n");
return NULL; //因为定义了指针p,但是p指向的那片空间没申请成功,要避免野指针,所以要指向NULL,所以返回一个NULL。
}
p->len = 0; //数据段置0
p->next = NULL; //指针段指向NULL
return p;
}
//创建新节点
linklistPtr getnode(stu_t data)
{
linklistPtr p = (linklistPtr)malloc(sizeof(linklist));
if(NULL == p)
{
printf("内存申请失败");
return NULL;
}
p->data = data;
p->next = NULL; //将指针段存放a的地址
return p; //返回指针p
}
//头插
int headi(linklistPtr p,stu_t a)
{
if(NULL == p)
{
printf("头插失败!\n");
return 0;
}
linklistPtr p1 = getnode(a);
p1->next=p->next; // 将头指针的指向 给插入的新节点。
p->next=p1; // 再将头指针指向新节点
p->len++; // 长度自增
return 1;
}
int main(int argc, const char* argv[]) {
FILE* fp = fopen("./stu.txt","r");
linklistPtr p =create();
linklistPtr p1 = p;
stu_t arr[5]={0};
int i=0;
while(1)
{
int ch = fscanf(fp,"%s %d %d %d %d %d %d\n",arr[i].name,&arr[i].chinese,&arr[i].math,&arr[i].chemical,&arr[i].physical,&arr[i].biological,&arr[i].english);
if(ch == EOF)
{break;}
i++;
}
for(int i=0;i<5;i++)
{ headi(p,arr[i]);
}
fclose(fp);
for(int j=0;j<i;j++)
{ p1=p1->next;
printf("%s %d %d %d %d %d %d\n",p1->data.name,p1->data.chinese,p1->data.math,p1->data.chemical,p1->data.physical,p1->data.biological,p1->data.english);
printf("-----------------------------------------------\n");
}
return 0;
}