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

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

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
能扩容的顺序表作为线性表的存储结构

#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)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档