数据结构实验指导书实验1Word格式文档下载.docx
- 文档编号:7400129
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:16
- 大小:19.50KB
数据结构实验指导书实验1Word格式文档下载.docx
《数据结构实验指导书实验1Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验指导书实验1Word格式文档下载.docx(16页珍藏版)》请在冰点文库上搜索。
//顺序表数据类型为SqList
3.程序结构
a)函数说明
intMenu();
//系统主菜单
intQMenu();
//查询菜单
voidPrintElem(Elemtypea);
//打印输出数据元素a的各数据项
voidInit_SqList(SqList&
L);
//构造一个空的顺序表L
voidSaveList(SqListL,FILE*out);
//保存顺序表L的数据
voidCreat_SqList(SqList&
L,FILE*in);
//建表
voidTraver_SqList(SqListL);
//查询(遍历顺序表L)
SqListInsert_SqList(SqList&
//添加
b)函数实现
//基本操作的实现
intMenu()//系统主菜单
{
intn;
printf("
----------------------------\n"
);
******************学生信息管理系统******************\n\n"
\t1.导入数据\n"
\t2.查询(全部信息、男生信息、女生信息)\n"
\t3.添加学生信息\n"
\t4.删除学生信息\n"
\t5.统计人数(男生、女生、不及格、优秀等)\n"
\t6.排序(升序、降序)\n"
\t7.修改(修改姓名、性别、年龄、分数等属性值)\n"
\t8.存盘\n"
\t0.退出\n\n"
**********************欢迎访问**********************\n"
scanf("
%d"
&
n);
return(n);
}
intQMenu()//查询菜单
\n\t***********欢迎进入查询系统************\t\n"
\t1.全部信息"
\t2.男生信息"
\t3.女生信息"
\t4.退出\t"
\n\t**************************************\t\n"
}
voidPrintElem(Elemtypea)
{//打印输出数据元素a的各数据项,即输出单个学生信息
(%8d%-8s%c%4d%4d)\n"
a.num,a.name,a.sex,a.age,a.score);
L)
{//构造一个空的顺序表L
L.data=(Elemtype*)malloc(MaxSize*sizeof(Elemtype));
if(!
L.data)exit
(1);
L.length=0;
L,FILE*in)
{//建表,从文件指针in所指文件读取数据,以尾插法建立顺序表L
inti;
fscanf(in,"
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);
voidTraver_SqList(SqListL)
{//遍历顺序表L(输出L中的数据序列)
//查询(1.全部信息2.男生信息3.女生信息4.退出)
inti,choice=QMenu();
switch(choice)
{
printf("
\n(学号姓名性别年龄分数)\n"
case1:
//全部信息
for(i=0;
i++)
PrintElem(L.data[i]);
/*等价于:
printf("
L.data[i].num,
L.data[i].name,L.data[i].sex,L.data[i].age,L.data[i].score);
*/
\n"
break;
case2:
//男生信息
if(L.data[i].sex=='
m'
)
PrintElem(L.data[i]);
case3:
//女生信息
f'
case4:
return;
//退出
}
{//在顺序表L的第i个位置上插入(添加)一个新元素
Elemtypex;
请输入插入的位置(1..%d)i="
L.length+1);
i);
if((i<
1)||(i>
L.length+1))//检查插入位置的正确性
{printf("
插入位置i不合理!
"
exit
(1);
}//不合理,中止程序运行
if(L.length>
=MaxSize)//顺序表是否已满
“顺序表已满,不能再插入!
”"
}//表满,不能插入
请输入添加的元素(学号姓名性别年龄成绩)\nx="
x.num,x.name,&
x.sex,&
x.age,&
x.score);
for(intm=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
returnL;
//插入成功,返回
}
voidSaveList(SqListL,FILE*out)
{//将顺序表L的数据存入文件output1.txt
fprintf(out,"
%d\n"
//保存表长
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)主函数
voidmain()
{//通过文件input1.txt输入数据,结果输出到文件output1.txt
//打开输入输出文件
FILE*in,*out;
if((in=fopen("
input1.txt"
"
r"
))==NULL)
{printf("
cannotopeninfile\n"
exit(0);
if((out=fopen("
output1.txt"
w"
intchoice;
SqListL;
Init_SqList(L);
//系统文件初始化,构造空表L
while
(1)
choice=Menu();
switch(choice)
{
case1:
Creat_SqList(L,in);
//导入数据,根据文件input.txt读入的数据建立顺序表L
break;
case2:
Traver_SqList(L);
//查询,输出顺序表
case3:
Insert_SqList(L);
//在顺序表L中插入一个新元素
case4:
//删除元素
case5:
//统计
case6:
//排序
case7:
//修改
case0:
SaveList(L,out);
fclose(in);
fclose(out);
exit(-1);
//保存数据,并退出系统
}
getchar();
五、实验要求
1.认真阅读和掌握本实验的示例程序。
2.上机运行示例程序,打印出程序的运行结果,并作必要的说明。
3.对示例程序,按照对线性表的操作需要,在程序中至少添加2个顺序表的相关操作。
如:
1)查找并显示分数在区间[a,b)的学生信息;
2)查找并显示最高分或最低分学生信息;
3)统计不及格或及格人数及所占比例;
4)将信息表按学号、姓名或分数升序或降序排列;
5)按学号顺序进行数据元素的插入;
6)删除指定学号或姓名的学生信息;
7)修改某个学生的信息;
8)其它。
4.重新改写主函数(要求必需调用自己添加的操作),打印出文件清单(自己添加的函数、修改后的主函数和运行结果)。
5.对修改后的程序,分析每一个算法(函数)的时间复杂度。
6.根据上述要求撰写实验报告,并简要给出算法设计小结和心得。
//************************************************************************//
附:
顺序表基本操作的实现程序实例
本程序实例提供的顺序表存储结构定义及基本操作的实现仅供参考。
//-----------------SqList2.CPP--------------------
//本程序定义了顺序表存储结构的另外一种形式
//并演示了几个基本操作的实现
//(初始化、清空、求长度、判空、判满、遍历、查找、插入、删除、有序输出)
#include<
stdio.h>
iostream.h>
stdlib.h>
iomanip.h>
typedefintElemType;
//定义ElemType为int类型
//线性表顺序存储类型定义
structSqList
{ElemType*list;
//
intsize;
//线性表长度
intMaxSize;
//线性表的最大容量
};
//顺序表基本操作说明
voidInitList(SqList&
L,intms);
//初始化顺序表
voidClearList(SqList&
//清空线性表
intListSize(SqList&
//求线性表长度
boolListEmpty(SqList&
//检查线性表是否为空
boolListFull(SqList&
//检查线性表是否为满
voidTraverList(SqList&
//遍历线性表
intFindList(SqList&
L,ElemTypeitem);
//从线性表中查找元素
boolInsertList(SqList&
L,constElemTypeitem,intmark);
//向线性表插入元素
boolDeleteList(SqList&
L,ElemType&
item,intmark);
//从线性表中删除元素
voidOrderOutputList(SqList&
L,intmark);
//对线性表进行有序输出
//顺序表基本操作的实现
//初始化顺序表
L,intms)
{L.list=newElemType[ms];
L.list)
{cout<
<
Memoryallocationfailure!
endl;
L.size=0;
L.MaxSize=ms;
//清空线性表
{L.size=0;
//求线性表长度
{returnL.size;
//检查线性表是否为空
{returnL.size==0;
//检查线性表是否为满
{returnL.size==L.MaxSize;
//遍历线性表
{for(inti=0;
L.size;
i++)cout<
L.list[i]<
'
'
;
//输出元素
cout<
//从线性表中查找元素
L,ElemTypeitem)
if(L.list[i]==item)returni;
return-1;
//向线性表的表头、表尾或合适位置插入元素
L,constElemTypeitem,intmark)
{if(ListFull(L))returnfalse;
if(mark>
0)//向表头插入元素
{for(inti=L.size-1;
i>
=0;
i--)
L.list[i+1]=L.list[i];
L.list[0]=item;
else//向表尾插入元素
if(mark<
0)L.list[L.size]=item;
else{//有序插入元素
for(inti=0;
if(item<
L.list[i])break;
for(intj=L.size-1;
j>
=i;
j--)
L.list[j+1]=L.list[j];
L.list[i]=item;
L.size++;
returntrue;
//从线性表中删除表头、表尾或等于给定值的元素
item,intmark)
{if(ListEmpty(L))returnfalse;
0)//删除表头元素
{item=L.list[0];
for(inti=1;
L.list[i-1]=L.list[i];
else//删除表尾元素
0)item=L.list[L.size-1];
else{//删除值为item的元素
if(L.list[i]==item)break;
if(i>
=L.size)returnfalse;
for(intj=i;
j<
j++)
L.list[j]=L.list[j+1];
L.size--;
//表长减1
//对线性表进行有序输出
L,intmark)
{int*b=newint[L.size];
inti,k;
i++)b[i]=i;
for(i=1;
i++)
{k=i-1;
{if(mark==1&
&
L.list[b[j]]<
L.list[b[k]])k=j;
if(mark!
=1&
L.list[b[k]]<
L.list[b[j]])k=j;
if(k!
=i-1){intx=b[i-1];
b[i-1]=b[k];
b[k]=x;
L.list[b[i]]<
constintML=10;
//线性表的最大长度
{SqLista;
InitList(a,ML);
ElemTypex;
//依次向线性表a表尾插入5个整数元素
从键盘输入5个整数:
5;
{cin>
>
x;
InsertList(a,x,-1);
//依次向线性表表头插入2个整数元素
从键盘输入两个整数:
cin>
InsertList(a,x,1);
//按不同次序遍历输出线性表a
TraverList(a);
OrderOutputList(a,1);
OrderOutputList(a,0);
//把线性表a中的元素依次有序插入到一个新线性表b中
SqListb;
InitList(b,ML);
a.size;
InsertList(b,a.list[i],0);
//输出线性表b
TraverList(b);
//从线性表a中依次删除表头、表尾和等于给定值的元素
if(DeleteList(a,x,1))cout<
Deletesuccess!
elsecout<
Deletefail!
//输出线性表a
if(DeleteList(a,x,-1))cout<
从键盘上输入一个待删除的整数:
if(DeleteList(a,x,0))cout<
//*************************************************************************//
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 指导书
![提示](https://static.bingdoc.com/images/bang_tan.gif)