• 大小: 4KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-06-18
  • 语言: C/C++
  • 标签: 算法  

资源简介

首先,逐行读取指定文件中的数据,并进行解析后保存在顺序表中。其中,文件中每行数据格式为“学号,姓名,年龄”,比如“SA10225048,[yyw1] 张三,24”。 (提示:采用顺序表结构时,顺序表中每个表元素包含三类信息:学号,姓名,和年龄;采用单链表结构时,单链表中每个结点的数据域包含三类信息:学号,姓名,和年龄。) 再,根据键盘输入进行相关操作(查找,删除和插入)。比如,若键盘输入为“P3”,则表示打印出第3项的信息(注意:采用顺序表结构时,第3项数据对应下标为2的表元素;采用单链表结构时,第3项数据对应链表中第3个结点的信息;);若键盘输入为“D3”,则表示删除第3个表元素;若键盘输入为“I3,SA10225038,张四,24”,则表示在第3项前插入一个学生的信息(SA10225038,张四,24)。

资源截图

代码片段和文件信息

#include
#include
#include
#include

typedef struct ListNode { //定义结构体
char *id;
char *name;
char *age;
ListNode *Next;        //    指向下一个链表节点
}Node *PNode;

void readfile(PNode L int *m){
PNode p q;
q = L;
int i;
FILE *fp;
char buffer[30]; //buffer数组存放读取文件的每一条信息
q = L; //读入第一条数据
if ((fp = fopen(“Lab1test.DAT“ “r“)) == NULL) // 打开文件并且让fp指向文件 
{
printf(“Can not open file\n“);
}
while (!feof(fp)){ //当文件未结束时执行
p = (PNode)malloc(sizeof(Node));

if (fgets(buffer 30 fp) == NULL)
break;
buffer[strlen(buffer) - 1] = ‘\0‘;
int count = 0;
for (i = 0; buffer[i] != ‘‘; i++){ //count记录每个结点应该分配的大小
count++;
}

p->id = (char*)malloc(sizeof(char)*(count + 1));
buffer[i++] = ‘\0‘;
strcpy(p->id buffer);

count = 0;
for (; buffer[i] != ‘‘; i++){
count++;
}
p->name = (char*)malloc(sizeof(char)*(count + 1));
buffer[i++] = ‘\0‘;
strcpy(p->name &buffer[i - count - 1]);
p->age = (char*)malloc(sizeof(char)*(count + 1));
strcpy(p->age &buffer[i]);

q->Next = p; //将p插入链表的末尾
q = q->Next; //q指针后移
(*m)++; //信息条数+1
}
q->Next = NULL;
}

void PrintList(PNode L){
PNode p;
p = L->Next;
int count = 1;
//printf(“%-15s%-10s%-5s\n“ “学号“ “姓名“ “年龄“);
while (p != NULL){
printf(“第%d项:学号%s 姓名%s年龄%s\n“ countp->id p->name p->age);
count++;
p = p->Next;

}
}
void DelNode(PNode L int c){
PNode p q;
p = L;

for (int i = 0; i {
p = p->Next;
}
q = p->Next;
p->Next = p->Next->Next;
free(q);
PrintList(L);
}

void InsertNode(PNode L int c){
int i count=0;
PNode p q;
p = L;
char a[30];

//printf(“请输入插入信息:\n“);
scanf(“%s“ a);

评论

共有 条评论