把txt中的名字(一行一个)依次输入链表中,以便后续的插入删除输出等操作
5条回答 默认 最新
- qfl_sdu 2022-10-03 18:44关注
运行结果:
代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> //每个名字的最大长度 #define MAXLEN 30 typedef struct _sta { char* str; }Sta; typedef struct _stnode { Sta data; struct _stnode* next; }LNode,*LinkList; //初始化链表 void InitList(LinkList* head) { (*head) = (LinkList)malloc(sizeof(LNode)); (*head)->next = 0; } //读文件并采用尾插法插入链表 void CreateList(LinkList head,const char* filename) { FILE* fp = 0; LinkList p,t; fp = fopen(filename,"r"); if(fp == 0) { printf("文件读取错误!\n"); return ; } //移动到链表末尾 p = head; while(p->next) p = p->next; //读取文件 while(!feof(fp)) { t = (LinkList)malloc(sizeof(LNode)); t->data.str = (char*)malloc(MAXLEN); t->data.str[0] = 0; //初始化 t->next = NULL; fscanf_s(fp,"%s",t->data.str,MAXLEN); //将节点插入链表 if(strlen(t->data.str)>0)//判断是否读取到数据 { p->next = t; p = t; }else { free(t->data.str); free(t); } } //关闭 fclose(fp); } //显示链表 void PrintList(LinkList head) { LinkList p = head->next; while(p) { printf("%s ",p->data.str); p = p->next; } printf("\n"); } int main() { LinkList head = 0; const char* filename = "a.txt"; InitList(&head); CreateList(head,filename); PrintList(head); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用