能扩容的顺序表作为线性表的存储结构.docxVIP

  • 22
  • 0
  • 约5.19千字
  • 约 9页
  • 2017-12-14 发布于河南
  • 举报

能扩容的顺序表作为线性表的存储结构.docx

能扩容的顺序表作为线性表的存储结构

#include stdio.h#include stdlib.h#include string.h#define MAX 4// 动态数组的初始长度#define LISTINCREMENT 3// 动态数组长度不够时,每次增加的长度// 学生结构体typedefstruct{char no[10];char name[20];char gender;float score;} STU;// 动态顺序表结构体typedefstruct{STU *s;// 存放学生的动态数组的起始地址,数组大小可以扩充,因此称其为“动态”intlistSize;// 当前顺序表中数组单元的个数int length;// 当前表中元素的个数(肯定小于数组单元的个数)} SeqList;// 功能菜单void menu(){printf(\n\t***动态顺序表(顺序表空间可以扩充)***\n);printf(\t* 1 插入一个学生 *\n);printf(\t* 2 删除一个学生 *\n);printf(\t* 3 修改学生信息 *\n);printf(\t* 4 输出所有学生信息 *\n);printf(\t* 0 保存数据并退出程序 *\n);printf(\t************************************\n);}/* 检测当前目录下是否存在文件stu.dat,如果存在,则从其中读取数据构造线性表;否则,新建该数据文件。*/void init(SeqList SL)// 将顺序表定义为主函数中的局部变量list,此处通过参数SL对其进行引用{FILE *fp;char flag=r;STU stmp;inti;/* 给动态数组开辟初始的内存空间,并初始化为空表;*/SL.s = (STU *)malloc(sizeof(STU)*MAX); // 基本等价于 SL.s = (STU *)calloc(MAX, sizeof(STU));// 设置顺序表中动态数组的初始长度为MAXSL.listSize = MAX;// 设置顺序表的初始长度为0SL.length=0;// 打开文件if((fp=fopen(stu.dat, rb))==NULL){flag=w;if((fp=fopen(stu.dat, wb))==NULL){printf(数据文件创建不成功,程序异常退出!);exit(-1);}}// 开始读文件if(flag==r){i=0;fread(stmp, sizeof(STU), 1, fp);// 先尝试着读第一个学生while(!feof(fp))// 检测文件尚未结束,则说明读到了一个学生{if(iSL.listSize){SL.s[i] = stmp;// 将读到的学生stmp复制到顺序表中s数组的i号单元fread(stmp, sizeof(STU), 1, fp);// 从文件读下一个学生的同时,执行i++i++;}else{// 必须先扩充顺序表中动态数组s的空间,然后再继续;// 给顺序表中的动态数组增加LISTINCREMENT个单元的空间SL.s = (STU *)realloc(SL.s, (SL.listSize+LISTINCREMENT)*sizeof(STU));SL.listSize = SL.listSize+LISTINCREMENT;}}SL.length = i;// 读到的学生个数即为顺序表长度}// 关闭文件fclose(fp);}/* 插入一个学生到线性表中 */void insert(SeqList SL){inti,location,len;SeqListsl;voidshowAll(SeqList SL);void save(SeqList SL);showAll(SL);len=SL.length;printf(\n当前顺序表中已有%d个元素,当前插入位置只能是[1,%d]\n,len,len);printf(\n请输入插入位置:);scanf(%d,location);while(location=0||location=len){printf(\n插入位置错误,请再次输入插入位置:);scanf(%d,location);}while(SL.length=SL.listSize){sl.s=(STU*)malloc((SL.listSize+LISTINCREMENT)*sizeof(STU));sl.listSize=SL.listSize+LISTINCREMENT;sl

文档评论(0)

1亿VIP精品文档

相关文档