case 4: case 5: case 6: case 7:
break;//删除元素 break;//统计 break;//排序 break;//修改
case 0: SaveList(L,out);fclose(in);fclose(out);exit(-1);break;
//保存数据,并退出系统
} }
} getchar();
五、 实验要求
1.认真阅读和掌握本实验的示例程序。
2.上机运行示例程序,打印出程序的运行结果,并作必要的说明。 3.对示例程序,按照对线性表的操作需要,在程序中至少添加2个顺序表的相关操作。如:
1) 查找并显示分数在区间[a,b)的学生信息; 2) 查找并显示最高分或最低分学生信息; 3) 统计不及格或及格人数及所占比例;
4) 将信息表按学号、姓名或分数升序或降序排列; 5) 按学号顺序进行数据元素的插入; 6) 删除指定学号或姓名的学生信息; 7) 修改某个学生的信息; 8) 其它。
4.重新改写主函数(要求必需调用自己添加的操作),打印出文件清单(自己添加的函数、修改后的主函数和运行结果)。 5.对修改后的程序,分析每一个算法(函数)的时间复杂度。 6.根据上述要求撰写实验报告,并简要给出算法设计小结和心得。
6
《数据结构实验》指导书
//************************************************************************//
附:顺序表基本操作的实现程序实例
本程序实例提供的顺序表存储结构定义及基本操作的实现仅供参考。 //-----------------SqList2.CPP-------------------- //本程序定义了顺序表存储结构的另外一种形式 //并演示了几个基本操作的实现
//(初始化、清空、求长度、判空、判满、遍历、查找、插入、删除、有序输出)
#include
typedef int ElemType; // 定义ElemType为int类型 //线性表顺序存储类型定义 struct SqList {ElemType *list;// int size;// 线性表长度
int MaxSize;//线性表的最大容量 };
//顺序表基本操作说明
void InitList(SqList &L,int ms); //初始化顺序表 void ClearList(SqList &L); //清空线性表 int ListSize(SqList &L); //求线性表长度 bool ListEmpty(SqList &L); //检查线性表是否为空 bool ListFull(SqList &L);
//检查线性表是否为满 void TraverList(SqList &L);
//遍历线性表
int FindList(SqList &L,ElemType item);
//从线性表中查找元素
bool InsertList(SqList &L,const ElemType item,int mark);//向线性表插入元素 bool DeleteList(SqList &L,ElemType &item,int mark); //从线性表中删除元素
void OrderOutputList(SqList &L,int mark); //对线性表进行有序输出
//顺序表基本操作的实现
//初始化顺序表
void InitList(SqList &L,int ms)
7
{L.list=new ElemType[ms]; if(!L.list) {cout<<\ exit(1);
}
L.size=0; L.MaxSize=ms; }
//清空线性表
void ClearList(SqList &L) {L.size=0; }
//求线性表长度 int ListSize(SqList &L) {return L.size; }
//检查线性表是否为空 bool ListEmpty(SqList &L) {return L.size==0; }
//检查线性表是否为满 bool ListFull(SqList &L) {return L.size==L.MaxSize; }
//遍历线性表
void TraverList(SqList &L)
{for(int i=0;i //从线性表中查找元素 int FindList(SqList &L,ElemType item) {for(int i=0;i 8 《数据结构实验》指导书 if(L.list[i]==item) return i; return -1; } //向线性表的表头、表尾或合适位置插入元素 bool InsertList(SqList &L,const ElemType item,int mark) {if(ListFull(L)) return false; if(mark>0) //向表头插入元素 { for(int i=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(int i=0;i L.list[j+1]=L.list[j]; L.list[i]=item; } L.size++; return true; } //从线性表中删除表头、表尾或等于给定值的元素 bool DeleteList(SqList &L,ElemType &item,int mark) {if(ListEmpty(L)) return false; if(mark>0) //删除表头元素 {item=L.list[0]; for(int i=1;i L.list[i-1]=L.list[i]; } else //删除表尾元素 if(mark<0) item=L.list[L.size-1]; else{ //删除值为item的元素 for(int i=0;i if(L.list[i]==item) break; if(i>=L.size) return false; 9 for(int j=i;j L.list[j]=L.list[j+1]; } L.size--;//表长减1 return true; } //对线性表进行有序输出 void OrderOutputList(SqList &L,int mark) {int *b=new int[L.size]; int i,k; for(i=0;i for(int j=i;j } if(k!=i-1) {int x=b[i-1];b[i-1]=b[k];b[k]=x;} } for(i=0;i } const int ML=10; //线性表的最大长度 void main() {SqList a; InitList(a,ML); int i; ElemType x; //依次向线性表a表尾插入5个整数元素 cout<<\从键盘输入5个整数:\ for(i=0;i<5;i++) {cin>>x; InsertList(a,x,-1); } //依次向线性表表头插入2个整数元素 10 《数据结构实验》指导书 cout<<\从键盘输入两个整数:\ cin>>x;InsertList(a,x,1); cin>>x;InsertList(a,x,1); //按不同次序遍历输出线性表a TraverList(a); OrderOutputList(a,1); OrderOutputList(a,0); //把线性表a中的元素依次有序插入到一个新线性表b中 SqList b; InitList(b,ML); for(i=0;i //从线性表a 中依次删除表头、表尾和等于给定值的元素 if(DeleteList(a,x,1)) cout<<\ else cout<<\ //输出线性表a TraverList(a); if(DeleteList(a,x,-1)) cout<<\ else cout<<\ //输出线性表a TraverList(a); cout<<\从键盘上输入一个待删除的整数:\ cin>>x; if(DeleteList(a,x,0)) cout<<\ else cout<<\ //输出线性表a TraverList(a); } //*************************************************************************// 11