C语言实现
#include "stdio.h"
#include "stdlib.h"
/*****************************
链表节点结构体
****************************/
typedef struct link_node {
int ID;
char name;
int Yuwen;
int Shuxue;
int Yingyu;
int Dili;
int Shengwu;
struct link_node *next;
}node;
/*****************************
向控制台输出链表的各个节点值
****************************/
void dispaly(node *head)
{
node *p;
p = head;
if (!p) //如果head指针为空说明链表为空
{
printf("\n链表为空!\n\n");
}
else
{
printf("\n链表的各个节点的值为:\n");
while (p) //循环将各个节点值输出
{
p = p->next;//第一是垃圾值 跳过
printf("%d %c %d %d %d %d %d\n",p->ID, p->name, p->Yuwen, p->Shuxue, p->Yingyu, p->Dili, p->Shengwu);//打印
}
}
}
/******************************************
找到要插入的上一个节点位置,实际就是连续插入在尾部
*********************************************/
node *find(node *head,int i)
{
int j = 1;
node *p = head;
if (i < 1) //节点从第一个开始 为0说明没有节点 链表为空 返回NULL
{
printf("\n链表长度要大于零\n\n");
return NULL;
}
while (p&&i!=j) //循环判断直到找到目标节点
{
p = p->next;
j++;
}
return p;//返回找到的目标节点
}
/******************************************
插入节点,找到要插入的位置后插入带数据的节点
*********************************************/
node *insert(node *head, int ID,char name,int Yuwen,int Shuxue,int Yingyu,int Dili,int Shengwu,int i)
{
node *p, *q;
q = find(head, i);
if (!q&&i!=0) //对find的结果进行判断,同时对i输入的值判断
{
printf("找不到第%d个节点,无法插入数据\n",i);
}
else
{
p = (node*)malloc(sizeof(node));//实例化节点,分配空间
p->ID = ID; //将文件读出来的值赋值给节点的数据域
p->name = name;
p->Yuwen = Yuwen;
p->Shuxue = Shuxue;
p->Yingyu = Yingyu;
p->Dili = Dili;
p->Shengwu = Shengwu;
if (i == 0) //如果是空链表 就把这个节点作为头指针指向的节点
{
p->next = head;
head = p;
}
else //如果不是空链表就正常代换指针域
{
p->next = q->next;
q->next = p;
}
}
return head;//返回修改后的链表头指针
}
/***********主函数*************/
void main()
{
//链表初始化
node *head,*s;
head = (node*)malloc(sizeof(node)); //例化
//文件读取
FILE *fp;
int i = 0;
int j = 0;
int ID[9], YW[9], SX[9], YY[9], DL[9], SW[9];//接收文件读出来的数据
char name[9];
//char locationfile[80];//文件路径
//char ch;
//printf("请输入文件绝对路径:");
//scanf("%s", locationfile);
fp = fopen("test.txt","r");//打开文件
if (fp == NULL) //判断是否正常打开文件
{
printf("读取文件失败\n\n");
exit(0);
}
else
{
printf("读取文件成功\n\n");
}
for (i = 0; i <= 9;i++) //按照文件里的数据格式 循环的读入每一行的数据,并存入相应的数组缓存中
{
fscanf(fp,"%d %c %d %d %d %d %d\n",&ID[i],&name[i],&YW[i],&SX[i],&YY[i],&DL[i],&SW[i]);
}
//ch= fgetc(fp);
fclose(fp);//操作文件结束必须关闭文件指针
for (j = 0; j <9; j++)//将数组里的数据打印出来看看是否正确
{
printf("%d %c %d %d %d %d %d\n", ID[j], name[j], YW[j], SX[j], YY[j], DL[j], SW[j]);
}
for (int m = 1; m <= 9; m++)//循环调用链表插入函数,将数组值写入链表中
{
s = insert(head, ID[m-1], name[m-1], YW[m-1], SX[m-1], YY[m-1], DL[m-1], SW[m-1], m);
}
dispaly(s);//将链表的各个节点值打印出来
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/37182.html