• 大小: 9KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-12
  • 语言: C/C++
  • 标签: 顺序表  c语言  

资源简介

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

资源截图

代码片段和文件信息

#include “pch.h“
#include 
#include 
#include 
#include 

#define filename “C:\\Users\\lenovo\\source\\repos\\linearlist\\Lab1test.DAT“

#define list_init_size 100   //线性表存储空间的初始分配量
#define LISTINCREMENT 10     //线性表存储空间的分配增量

typedef int Status;

typedef struct
{
char id[11]; //多1个char是结束符
char name[20];
char age[3];
}ElemType;

typedef struct
{
ElemType *elem;
int length; //当前长度
int listsize; //当前分配的存储容量,sizeof(Elemtype)为单位
}Sqlist;


void InitList_Sq(Sqlist *L) {
//构造一个空的线性表L
L->elem = (ElemType *)malloc(list_init_size * sizeof(ElemType));
if (!L->elem) exit(-1); //存储分配失败
L->length = 0; //空表长度为0
L->listsize = list_init_size; //初始存储容量
}//Initlist_Sq

Status ListInsert_Sq(Sqlist *L int i ElemType e) {
//在顺序线性表L中下标为i的位置插入新的元素e,
//i的合法值为0<=i<=ListLength_Sq(L)-1
ElemType *p *q *newbase; //定义指针
if (i<0 || i>L->length) {
//printf(“插入位置不合理“);
return 0;
}//i值不合法
if (L->length >= L->listsize) { //当前存储空间已满,增加分配
newbase = (ElemType *)realloc(L->elem (L->listsize + LISTINCREMENT) * sizeof(ElemType));
if (!newbase) {
//printf(“分配空间失败“);
exit(-1);
}//存储分配失败
L->elem = newbase; //新基址
L->listsize += LISTINCREMENT; //增加存储容量
}
for (int j = L->length; j > i; j--)
L->elem[j] = L->elem[j - 1];
L->elem[i] = e;
L->length++;
return 0;
}//ListInsert_Sq



Status DeleteList_Sq(Sqlist *L int i)
{
// 删除顺序表下标为i的元素
//ElemType *p  *q ;
if (L == NULL)
return 0;
if (i < 0 || i > L->length - 1)
return 0;
for (int j = i; j < L->length - 1; j++)
L->elem[j] = L->elem[j + 1];
L->length--;
return 0;
}

void Outputall_Sq(Sqlist *L)
{
int i;
for (i = 0; i <= L->length - 1; i++) {
//printf(“%d “ i + 1);
printf(“%s %s %s\n“ L->elem[i].id L->elem[i].name L->elem[i].age);
}
}

void Outputline_Sq(Sqlist *L int i)
{
//删除下标为i的元素
printf(“%s %s %s\n“ L->elem[i].id L->elem[i].name L->elem[i].age);

}

void FiletoSqlist(Sqlist *L)
{

FILE *fp;
errno_t err;
err = fopen_s(&fp filename “r“); //fopen_s打开成功返回0,失败返回非0
char ch;
if (err != 0) { //是否打开成功判断,必须加
printf(“Cant‘t open file“);
exit(0);
}

char sztest[1000] = { 0 };
int len = 0ij=0;

while (!feof(fp)) {
ElemType e = {0};

评论

共有 条评论