当前位置:
文档之家› 数据结构实验指导书(实验1)
数据结构实验指导书(实验1)
//顺序表存储结构定义 #define MaxSize 50 //线性表的最大容量,假设为50 typedef struct Stu{ long int num;//学号 char name[20];//姓名 char sex;//性别 int age;//年龄 int score;//分数 }Elemtype;//定义数据元素为学生信息 typedef struct SqList { Elemtype *data; int length; // 线性表长度 }SqList; // 顺序表数据类型为SqList 3. 程序结构 a) 函数说明 int Menu();//系统主菜单 int QMenu();//查询菜单 void PrintElem(Elemtype a);//打印输出数据元素a的各数据项 void Init_SqList(SqList &L);//构造一个空的顺序表L void SaveList(SqList L,FILE *out);//保存顺序表L的数据 void Creat_SqList(SqList &L,FILE *in); //建表 void Traver_SqList(SqList L); //查询(遍历顺序表L) SqList Insert_SqList (SqList &L); //添加 b) 函数实现 //基本操作的实现 int Menu()//系统主菜单 { int n; printf("----------------------------\n"); printf("******************学生信息管理系统 ******************\n\n"); printf("\t1.导入数据\n"); printf("\t2.查询(全部信息、男生信息、女生信息)\n"); printf("\t3.添加学生信息\n"); printf("\t4.删除学生信息\n"); printf("\t5.统计人数(男生、女生、不及格、优秀等)\n"); printf("\t6.排序(升序、降序)\n");
实验一 顺序表的基本操作
1、 实验目的
1. 掌握使用VC++6.0调试程序的基本方法;
2. 掌握线性表的顺序存储结构的类型定义; 3. 掌握顺序表的基本操作的实现,如:插入、删除、遍 历、查找、排序、修改、合并等; 4. 掌握顺序表的应用。
2、 实验环境
1. 台式计算机每人一台; 2. 软件:Visual C++6.0
3、 注意事项
在U盘上创建一个以“学号姓名”命名的文件夹(如: 20090001张三),专门用于存储数据结构实验的程序及实 验报告。
4、 实验内容
示例程序:简易学生信息管理系统(SqList.cpp)
本简易学生信息管理系统要求以顺序表作为学生信息的载体,并实 现学生信息的查询、添加、删除、统计、排序、保存等基本功能。本示 例程序已经实现了简易学生信息管理中的查询、添加和保存等功能,要 求学生对该系统进行完善,继续添加相关函数以提高其实用性。 1. 文件结构设计 a) 原始数据:保存在文件input1.txt中。 b) 输出数据:保存在文件output1.txt中。 2. 数据结构设计
SqList Insert_SqList (SqList &L) {// 在顺序表L的第 i 个位置上插入(添加)一个新元素 Elemtype x; int i; printf("请输入插入的位置(1..%d)i=",L.length+1); scanf("%d",&i); if ((i<1) || ( i>L.length+1)) //检查插入位置的正确性 { printf ("插入位置i不合理!"); exit(1); } //不合理,中止程序 运行 if (L.length >= MaxSize) // 顺序表是否已满 { printf ("“顺序表已满,不能再插入!”"); exit(1); } // 表满,不能插入 printf("请输入添加的元素(学号 姓名 性别 年龄 成绩)\n x="); scanf("%d %s %c %d %d",&x.num,,&x.sex,&x.age,&x.score); for (int m=L.length-1; m>=i-1; --m) L.data [m+1]=L.data[m];// 数据后移 //L.data [m+1] = L.data[m]; // 数据后移 L.data[i-1]=x;//新元素插入 // L.data [i-1] = x; //新元素插入 L.length++; //表长+1 return L; //插入成功,返回 } void SaveList(SqList L,FILE *out) {//将顺序表L的数据存入文件output1.txt int i; fprintf(out,"%d\n",L.length);//保存表长 for(i=0;i<L.length;i++) //保存表中数据 fprintf(out,"%8d %-8s %c %4d %4d\n", L.data[i].num,L.data[i].name,L.data[i].sex,L.data[i].age,L.data[i].score); } c) 主函数
void main() {//通过文件input1.txt输入数据,结果输出到文件output1.txt //打开输入输出文件 FILE *in,*out; if((in=fopen("input1.txt","r"))==NULL) { printf("cannot open infile\n"); exit(0); } if((out=fopen("output1.txt","w"))==NULL) { printf("cannot open infile\n"); exit(0); } int choice; SqList L; Init_SqList(L);//系统文件初始化,构造空表L while(1) { choice=Menu(); switch(choice) { case 1: Creat_SqList(L,in); //导入数据,根据文件input.txt读入的数据建立顺序表L break; case 2: Traver_SqList(L);//查询,输出顺序表 break; case 3: Insert_SqList(L);// 在顺序表L中插入一个新元素 break; case 4: break;//删除元素
{//建表,从文件指针in所指文件读取数据,以尾插法建立顺序表L int i; fscanf(in,"%d",&L.length);//读取数据元素个数,即表长n //printf("表长n=%d\n",L.length); for(i=0;i<L.length;i++)//从文件input1.txt读取数据存入L fscanf(in,"%d %s %c %d %d",&L.data[i].num, L.data[i].name,&L.data[i].sex,&L.data[i].age,&L.data[i].score); } void Traver_SqList(SqList L) {//遍历顺序表L(输出L中的数据序列) //查询(1.全部信息 2.男生信息 3.女生信息 4.退出 ) int i,choice=QMenu(); switch(choice) { printf("\n(学号 姓名 性别 年龄 分数)\n"); case 1://全部信息 for(i=0;i<L.length;i++) PrintElem(L.data[i]); /*等价于:printf("(%8d %-8s %c %4d %4d)\n",L.data[i].num, L.data[i].name,L.data[i].sex,L.data[i].age,L.data[i].score);*/ printf("\n");break; case 2://男生信息 for(i=0;i<L.length;i++) if(L.data[i].sex=='m') PrintElem(L.data[i]); printf("\n");break; case 3://女生信息 for(i=0;i<L.length;i++) if(L.data[i].sex=='f') PrintElem(L.data[i]); printf("\n");break; case 4:return;//退出 } }
printf("\t7.修改(修改姓名、性别、年龄、分数等属性值) \n"); printf("\t8.存盘\n"); printf("\t0.退出\n\n"); printf("**********************欢迎访问 **********************\n"); printf("----------------------------\n"); scanf("%d",&n); return(n); } int QMenu()//查询菜单 { int n; printf("\n\t***********欢迎进入查询系统************\t\n"); printf("\t1.全部信息"); printf("\t2.男生信息"); printf("\t3.女生信息"); printf("\t4.退出\t"); printf("\n\t**************************************\t\n"); scanf("%d",&n); return(n); } void PrintElem(Elemtype a) {//打印输出数据元素a的各数据项,即输出单个学生信息 printf("(%8d %-8s %c %4d %4d)\n", a.num,,a.sex,a.age,a.score); } void Init_SqList(SqList &L) {//构造一个空的顺序表L L.data=(Elemtype *)malloc(MaxSize*sizeof(Elemtype)); if(!L.data) exit(1); L.length=0; } void Creat_SqList(SqList &L,FILE *in)