中国矿业大学 空间数据结构上机实验报告

合集下载

中矿大数据结构实验二

中矿大数据结构实验二

中国矿业大学计算机学院实验报告课程名称数据结构试验名称栈、队列的实现、递归应用班级******* 姓名****** 学号********仪器组号**** 实验日期********一、实验目的1 熟悉栈、队列这种特殊线性结构的特性2 熟练掌握栈、队列在顺序存储结构和链表存储结构下的基本操作。

二、实验要求1 实验之前认真准备,编写好源程序。

2 实验中认真调试程序,对运行结果进行分析,注意程序的正确性和健壮性的验证。

3 不断积累程序的调试方法。

三、实验内容基本题(必做):1 分别就栈的顺序存储结构和链式存储结构实现栈的各种基本操作。

2 、假设以带头结点的循环链表表示队列,并且只设一个指针指向对尾结点,不设头指针,试设计相应的置队空、入队和出队的程序。

加强题:1、设线性表A中有n个字符,试设计程序判断字符串是否中心对称,例如xyzyx和xyzzyx 都是中心对称的字符串。

四、程序清单和运行结果基本题:1.1顺序栈#include <iostream.h>#include <conio.h>#include <stdlib.h>const STACK_INIT_SIZE=100; //存储空间初始分配量const STACKINCREMENT=10; //存储空间分配增量typedef struct{int *base; //在构造之前和销毁之后,base的值为NULL int *top; //栈顶指针int stacksize; //当前已分配的存储空间,以元素为单位}SqStack;void InitStack(SqStack &S){ //构造一个空栈SS.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));if(!S.base)exit(0); //存储分配失败S.top=S.base;S.stacksize=STACK_INIT_SIZE; //cout<<"初始化完毕"<<endl}//InitStackvoid GetTop(SqStack S,int &e){ //若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERRORif(S.top==S.base){ cout<<"此栈为空!!!"<<endl;exit(0);}e=*(S.top-1);cout<<e<<endl; // cout<<"取值结束"<<endl}//GetTopvoid Push(SqStack &S,int e){ //插入元素e为新的栈顶元素if(S.top-S.base>S.stacksize){ //栈满,追加存储空间S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));if(!S.base){ cout<<"新分配空间失败!!!"<<endl;exit(0);}S.top = S.base + S.stacksize;S.stacksize += STACKINCREMENT;}*S.top++=e; // cout<<"插入元素成功"<<endl}//Pushvoid Pop(SqStack &S,int &e){ //若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERRORif(S.base==S.top){ cout<<"此栈为空栈,无法删除!!!"<<endl;exit(0);}e=*--S.top; // cout<<"删除成功!!!"<<endl}//Popvoid ClearStack(SqStack &S){ //把S置为空栈if(S.base==S.top)cout<<"此栈已经为空!!!"<<endl;S.top=S.base;}//ClearStackvoid main(){SqStack Stack;int m,n,x,y,z,i=0;InitStack(Stack);cout<<"请输入您要建立的栈的大小:"<<endl;cin>>n;Stack.stacksize=n;do{cout<<"请选择操作:"<<endl;cout<<" "<<"1,进栈2,出栈3,查看栈顶值4,清空栈5,退出"<<endl;cin>>m;switch(m){case 1:cout<<"请输入进栈值:"<<endl;cin>>z;if(i==Stack.stacksize){cout<<"Sorry!!!"<<endl<<"栈溢出!!"<<endl<<"此程序将退出!!!"<<endl;exit(0);}Push(Stack,z);i++;break;case 2:Pop(Stack,x);cout<<x<<"出栈"<<endl;break;case 3:cout<<"栈顶值为:"<<endl;GetTop(Stack,y);break;case 4:ClearStack(Stack);break;case 5:cout<<"Exit!!"<<endl;break;default:cout<<"输入错误!!!此程序将退出!!!"<<endl;exit(0);}//switch}while(m!=5);getch();}1.2链式栈#include <iostream.h>#include <conio.h>#include <stdlib.h>#include <iomanip.h>typedef struct Stack{Stack *next;int data;}Stack,*SLink;typedef struct{SLink top;int length;}SqStack;void InitStack(SqStack &S){ //构造一个空栈S.top=NULL; //设栈顶指针的初值为"空"S.length=0; //空栈中元素个数为}//InitStackvoid Push(SqStack &S,int &e){ //在栈顶之上插入元素e 为新的栈顶元素SLink p;p=new Stack; //建新的结点p->data=e;p->next=S.top;S.top=p;++S.length;}//Pushvoid Pop(SqStack &S,int &e){ //若栈不空,则删除S的栈顶元素,用e返回其值if(!S.top){ cout<<"此栈为空栈!!!"<<endl;exit(0);}e=S.top->data;S.top=S.top->next;}//Popvoid GetTop(SqStack &S,int &e){ //若栈不空,取栈顶元素,用e返回其值if(!S.top){ cout<<"此栈为空栈!!!"<<endl;exit(0);}e=S.top->data;cout<<e<<endl;}//GetTopvoid ClearStack(SqStack &S){if(!S.top)cout<<"此栈已经为空!!!"<<endl;S.top=NULL;}//ClearStackvoid main(){SqStack Stack;InitStack(Stack);int m,n,x,y,z,i=0;cout<<"请输入您要建立的栈的大小:"<<endl;cin>>n;do{cout<<"请选择操作:"<<endl;cout<<" "<<"1,进栈2,出栈3,查看栈顶值4,清空栈5,退出"<<endl;cin>>m;switch(m){case 1:cout<<"请输入进栈值:"<<endl;cin>>z;if(i==n){cout<<"Sorry!!!"<<endl<<"栈溢出!!"<<endl<<"此程序将退出!!!"<<endl;exit(0);}Push(Stack,z);i++;break;case 2:Pop(Stack,x);cout<<x<<"出栈"<<endl;break;case 3:cout<<"栈顶值为:"<<endl;GetTop(Stack,y);break;case 4:ClearStack(Stack);break;case 5:cout<<"Exit!!"<<endl;break;default:cout<<"输入错误!!!此程序将退出!!!"<<endl;exit(0);}//switch}while(m!=5);getch();getch();}2、置队空、入队和出队的程序#include <iostream.h>#include <conio.h>#include <stdlib.h> //队空、入队和出队int n=0;typedef struct Q{int data;Q *next;}Q,*QLink;void InitQ(QLink &q){ //构造一个队列q->next=q;}//InitQvoid Push(QLink &q,int &e){ //入队QLink p;p=new Q;p->data=e;p->next=q->next;q->next=p; n++;}//Pushvoid OutQ(QLink &q,int &e){ //出队QLink p;QLink t;p=new Q;t=new Q;p=q;int i;for(i=0;i<=n;i++){if(p->next->data==e){ t=p->next;p->next=t->next;delete t;break;}//ifp=p->next;}//forif(i==(n+1)){cout<<"您所输入的值不存在!此程序将退出!!"<<endl;exit(0);}}//OutQvoid ClearQ(QLink &q){ //置队空q=q->next;}//ClearQvoid checkQ(QLink &q,int &e){ //查看队尾元素if(q->next==q){cout<<"此队列为空!!程序将退出!!"<<endl;exit(0);}e=q->next->data;}//checkvoid main(){int m,x,n,y;QLink Qu;Qu=new Q;InitQ(Qu);do{cout<<"请选择操作:"<<endl;cout<<" 1,入队2,出队3,查看队尾元素4,清空队列5,退出"<<endl; cin>>x;switch(x){case 1:cout<<"请输入您想插入的值:"<<"\t";cin>>m;Push(Qu,m);break;case 2:cout<<"请输入您想出队的值:"<<"\t";cin>>n;OutQ(Qu,n);cout<<n<<"出队"<<endl;break;case 3:checkQ(Qu,y);cout<<"队尾元素为:"<<y<<endl;break;}//switch}while(x!=5);getch();}五、运行结果:六、实验体会栈和队列是数据结构里面很重要的两种特殊线性结构,它们的操作不同于线性表,其运算(插入和删除)是受限制的。

数据结构上机实验报告

数据结构上机实验报告
{if(i%2==0) insert(lb,i/2,la.list[i]); //奇数位次元诩插入lb
else insert(lc,i/2,la.list[i]); //偶数位次元素插入lc
}
printf("\n您输入的线性表元素为:\n\n");
print(la);
printf("线性表的奇数位次的元素为:\n\n");
print(lb);
printf("线性表的偶数位次的元素为:\n\n");
print(lc);
}
void initial(sqlist &v)
{printf(" ****本程序可以实现线性表奇偶位序的元素分别输出****\n\n\n");
int i,a;
printf("请输入一个偶数作为线性表的长度:\n\n");
void initlist(sqlist &);
void print(sqlist); //输出线性表
void main()
{printf(" *****************本程序可以实现线性表的复制******************\n");
sqlist la,lb; //声明线性表
initial(la);
【程序设计细想】:
建立三个线性表la,lb,lc,对线性表la进行输入,然后利用循环结构对la中奇数位序的元素对lb进行插入操作,对偶数位序的元素对lc进行插入操作,从而得到线性表lb和lc。
【程序代码】:
#include<stdio.h>
#include<malloc.h>

数据结构集中上机实验报告

数据结构集中上机实验报告

XX大学信息与计算科学专业2008级《数据结构》集中上机设计题目:迷宫求解(非递归求解)设计时间:2010-2011学年第一学期目录一、实验内容 (2)二、需求分析 (2)三、总体设计 (2)(一)存储结构 (2)(二)流程图 (3)四、详细设计 (3)(一)基本算法解析 (3)(二)为实现算法,需要的象的数据类型 (4)(三)函数的调用关系 (5)(四)算法时间、空间复杂度 (5)五、代码 (5)六、运行结果分析 (10)(一)迷宫路径探索成功 (10)(二)迷宫路径未找到的情况 (13)(三)程序的优缺点与改进 (13)七、参考文献 (14)八、心得体会 (14)一、实验内容任务:可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出。

二、需求分析1、可以输入一个任意大小的迷宫数据,用非递归的方法求出一条走出迷宫的路径,并将路径输出;要求使用非递归算法。

2、用户可以根据自己的需求进行输入所需的迷宫,其中1表示迷宫的墙壁,0表示迷宫的通路,从而建立迷宫。

3、可以自行输入迷宫的入口和出口坐标。

4、程序执行的命令包括:(1)构造栈函数。

其中包括了构造空栈InitStack;压入新数据元素Push;栈顶元素出栈Pop。

(2)构造求迷宫路径函数。

其中定义了二维数组maze[M][N]存取迷宫数据;输出找到的通路MazePath。

(3)建立一个迷宫initmaze。

其中包括输入迷宫行数列数以及各行各列;加一圈围墙并输出迷宫。

三、总体设计(一)存储结构:首先用二维数组存储迷宫数据,迷宫数据由用户输入。

一个以链表结构作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。

求得的通路以三元组(i,j,d)形式输出,其中(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向(东南西北所用代表数字,自行定义)。

1.从入口出发,顺着某一个方向进行探索,若能走通,继续往前走,否则沿原路退回,换一个方向继续探索,直至出口位置,求得一条通路。

中国矿业大学数据结构实验一

中国矿业大学数据结构实验一
加强题:
(1)采用数组作为求解过程中使用的数据结构。
提高题:
(2)采用循环链表作为求解过程中使用的数据结构。运行时允许指定任意n、s、m数值,直至输入n = 0退出程序。
四、五程序清单和运行结果
1-1基本题:
#include<stdio.h>
#include<malloc.h>
#define TRUE 1
一、实验目的:
1、并掌握线性表的逻辑结构、物理结构。
2、并掌握顺序表的存储结构、基本操作和具体的函数定义。
3、VC++程序的基本结构,掌握程序中的用户头文件、实现文件和主文件之间的相互关系及各自的作用。
4、悉VC++操作环境的使用以及多文件的输入、编辑、调试和运行的全过程。
二、实验要求:
1实验之前认真准备,编写好源程序。
{
int k=0;
while(k<L.length&&L.data[k]!=x)
k++;
if(k<L.length)
return k;
else
return -1;
}
//6.插入元素
int Insert(SqList &L,ElemType x,int i)
{
int k;
if(i<0||i>L.length||L.length==MAXSIZE)
}
//2.建立一个顺序存储的线性表
void CreatSqlist(SqList &L,int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&L.data[i]);

数据结构上机实验

数据结构上机实验

数据结构上机实验本课程实验中已知的预定义常量和类型如下:#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;实验一顺序表(一)一、 实验目的掌握顺序表的定义、存储结构及其基本操作。

二、 实验内容已知:线性表的动态分配顺序存储结构为#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef struct{int *elem;int length;int listsize;}SqList;在主程序中调用如下函数实现构造线性表,在线性表中插入数值,最后输出线性表。

1. 编写函数,Status InitList(SqList *L) 实现构造一个空的线性表,若构造成功则返回OK,否则返回ERROR。

2. 编写函数,Status ListInsert(SqList *L , int i , int e) 实现在线性表L中第i个位置之前插入新的数据元素e,L的长度加1。

若插入成功返回OK,否则返回ERROR。

(提示:i的合法值为:i>=1&&i<=L—>length+1)3. 编写函数,void ListPrint(SqList *L)实现将线性表中的元素依次输出到屏幕上。

4.编写函数,int Menu(),输出菜单项请选择你要进行的操作(请输入1-4中的任一个数字):输入1:InitList2:ListInsert3:ListPrint4:Exit实验二顺序表(二)一、 实验目的掌握顺序表的定义、存储结构及其基本操作。

二、 实验内容在实验一的基础上,继续完成如下实验内容。

1.编写函数,Status ListDelete(Splist *L ,int i ,int *e),实现删除L的第i个数据元素,并用e返回其值,L的长度减1。

数据结构上机实验报告

数据结构上机实验报告

数据结构上机实验报告学院:电子工程学院专业:信息对抗技术姓名:学号:教师:饶鲜日期:目录实验一线性表 ........................................................................................................ - 4 -一、实验目的.................................................................................................... - 4 -二、实验代码.................................................................................................... - 4 -三、实验结果.................................................................................................. - 14 -四、个人思路.................................................................................................. - 15 - 实验二栈和队列 .................................................................................................. - 15 -一、实验目的.................................................................................................. - 15 -二、实验代码.................................................................................................. - 16 -三、实验结果.................................................................................................. - 24 -四、个人思路.................................................................................................. - 25 - 实验三数组 .......................................................................................................... - 26 -一、实验目的.................................................................................................. - 26 -二、实验代码.................................................................................................. - 26 -三、实验结果.................................................................................................. - 28 -四、个人思路.................................................................................................. - 28 - 实验四树 .............................................................................................................. - 29 -一、实验目的.................................................................................................. - 29 -二、实验代码.................................................................................................. - 29 -三、实验结果.................................................................................................. - 39 -四、个人思路.................................................................................................. - 39 -实验一线性表一、实验目的1.熟悉线性表的顺序和链式存储结构2.掌握线性表的基本运算3.能够利用线性表的基本运算完成线性表应用的运算二、实验代码1.设有一个线性表E={e1, e2, … , e n-1, e n},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ e n, e n-1 , … , e2 , e1 },要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。

数据结构上机实习报告

数据结构上机实习报告

上机实习报告班号:116112姓名:**学号:***********实习报告【实习一】线性表及其应用n(n>20)的阶乘【问题描述】大数运算——计算n的阶乘(n>=20)。

【基本要求】(1)数据的表示和存储:(1.1)累积运算的中间结果和最终的计算结果的数据类型要求是整型——这是问题本身的要求;(1.2)试设计合适的存储结构,要求每个元素或结点最多存储数据的3位数值。

(2)数据的操作及其实现:基于设计的存储结构实现乘法操作,要求从键盘上输入n值,在屏幕上显示最终计算结果。

【问题分析】(1)设计数据的存储结构:介于乘运算的精确性以及实型数据表示的不精确性,本题不能采用实型表示累积运算的中间结果和最终的计算结果,而只能用整型。

然而由于普通整型和长整型所能表述数的范围受其字长的限制,不能表示大数阶乘的累积结果,故必须设计一个合适的数据结构实现对数据的存储,例如可以让每个元素或结点存储数据的若干位数值。

从问题描述不难看出n值为任意值,故为使程序尽量不受限制,应采用动态存储结构。

累积运算的特点是当前的计算结果是下次乘法运算的乘数。

实现两个数的乘法运算须考虑:(1)乘数的各位数都要与被乘数进行乘法运算;(2)乘法过程中的进位问题及其实现;(3)因每个元素或结点最多存储数据的3位数值,故当元素或结点中的数值大于999,需向前一个元素或结点进位。

综合以上几点,我采用了单链表的储存结构形式。

(2)阶乘算法的实现:1. 链表型数据乘法的具体实现描述:(1)初始算法顺序访问对每个节点上的数据乘以要乘的数后在顺序访问查看是否需要进位,大于999则向前进位,如果前面没有节点则添加新节点储存进位的数(2)改进算法将原始算法的乘操作和进位操作合在一起进行,提高程序效率.2. 数据输出算法具体实现描述从高位向低位顺序输出节点上储存的数据,注意补零,最高位的节点不补,其它节点要补。

对于最后的结果,因为我采用的是普通的单链表算法,因此我添加了一个逆置的算法。

《数据结构》上机作业——实验报告(五)[推荐]

《数据结构》上机作业——实验报告(五)[推荐]

《数据结构》上机作业——实验报告(五)[推荐]第一篇:《数据结构》上机作业——实验报告(五)[推荐]“计算机软件技术基础”课程实验报告(五)实验名称:排序算法班级_______ 姓名__________ 学号______实验日期:实验机时:3 学时实验成绩:-----------------一.实验目的:1、掌握主要排序算法的思想和实现技术。

二.实验内容:1、设计一程序,要求:输入学生“软件技术基础”课的成绩(学号、姓名、平均成绩、总学分);按总学分对学生数据进行排序。

(要求:实现任选3种排序算法)三.程序:1、程序规范(输入数据、功能、输出数据)2、设计分析(数据表示、算法)3、C源代码(电子版)四.程序调试:第二篇:《数据结构》上机作业——实验报告(六)“计算机软件技术基础”课程实验报告(六)实验名称:数据库及SQL语言班级_______ 姓名__________ 学号______实验日期:实验机时:3 学时实验成绩:-----------------一.实验目的:1、学习数据库设计的一般过程及相关技术;2、学习access数据库管理系统;3、掌握数据库的输入、查询、更新操作。

二.实验内容:1、需求陈述:某校图书馆要建立一个图书数据管理系统。

该图书馆的图书(书名、分类号、作者、出版社)存放在不同的借阅室(室名),读者(姓名、系名、类别)在书架上找到所需图书后,可以到服务台办理借阅(借阅时间)。

设计要求:λ分析需求,建立数据库的概念模型;λ将概念模型转换为关系模型(注意:是否需要作规范化处理);λ写出创建基本表的SQL语句;λ写出以下查询要求的SQL语句:(1)所有“高等数学习题集”书的信息;(2)读者“李林”借了什么书?(3)“社会学原理”在哪个借阅室?2、在access数据库管理系统中建立所设计的关系表;3、向各表中输入一组实验数据(元组)(注意:关系完整性);4、对数据库进行查询。

三.实验结果:1、实体-关系图;2、数据库表;3、创建基本表的语句;4、查询语句。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《空间数据结构基础》上机实验报告(2010级)姓名班级学号环境与测绘学院1.顺序表的定义与应用(课本P85习题)【实验目的】熟练掌握顺序表的定义与应用,通过上机实践加深对顺序表概念的理解。

【实验内容】设有两个整数类型的顺序表A(有m个元素)和B(有n个元素),其元素均从小到大排列。

试编写一个函数,将这两个顺序表合并成一个顺序表C,要求C的元素也从小到大排列。

【主要代码】#include<iostream.h>//定义在头文件“SeqList.h”中#include<stdlib.h>const int defaultSize=100;template<class T>class SeqList{protected:T *data;//存放数组int maxSize;//最大可容纳表象的项数int Last;//当前已存表象的项数void reSize(int newSize);//改变data数组空间大小public:SeqList(int sz=defaultSize);SeqList(SeqList<T>& L);~SeqList(){delete[]data;}int Size() const{return maxSize;}int Length()const{return Last+1;}int Search(T& x)const;int Locate(int i) const;T getData(int i) const;bool setData(int i,T& x){if(i>0&&i<=Last+1) data[i-1]=x;}bool Insert(int i,T& x);bool Remove(int i,T& x);bool IsEmpty(){return (Last==-1)?true:false;}bool IsFull(){return(Last==maxSize-1)?true:false;}void input();void output();SeqList<T> operator=(SeqList<T>& L);friend void rank(SeqList<int>& L);friend void hebing(SeqList<int>& LA,SeqList<int>& LB);};//构造函数,通过指定参数sz定义数组的长度template<class T>SeqList<T>::SeqList(int sz){if(sz>0){maxSize=sz;Last=-1;data=new T[maxSize];if(data==NULL){cerr<<"存储分配错误"<<endl;exit(1);}}}//复制构造函数,用参数表中给出的已有顺序表初始化新建的顺序表template<class T>SeqList<T>::SeqList(SeqList<T>& L){maxSize=L.Size();Last=L.Length()-1;data=new T[maxSize];if(data==NULL){cerr<<"存储分配错误"<<endl;exit(1);}for(int i=1;i<=Last+1;i++)data[i-1]=L.getData(i);}//用于取第i个表项的值template <class T>T SeqList<T>::getData(int i) const{if (i<1 || i>Last+1){cerr<<"存储分配错误"<<endl;exit(1);}else return data[i-1];}//私有函数,扩充顺序表的存储空间大小,新数组的元素个数为newsize template<class T>void SeqList<T>::reSize (int newSize){if (newSize<=0){cerr<<"无效的数组大小"<<endl;return;}if(newSize!=maxSize){T*newarray=new T[newarray];if(newarray=NULL){cerr<<"存储分配错误"<<endl;exit(1);}int n=Last+1;T*srcptr=data;T*destptr=newarray;while(n--)*destptr++=*srcptr++;delete []data;data=newarray;maxSize=newSize;}}//搜索函数template<class T>int SeqList<T>::Search(T& x)const{for(int i=0;i<=Last;i++)if(data[i]==x)return i+1;return 0;}//定位函数template<class T>int SeqList<T>::Locate(int i)const{if(i>=1&&i<=Last+1)return i;else return 0;}//插入函数template<class T>bool SeqList<T>::Insert(int i,T& x){if(Last==maxSize-1) return false;if(i<0||i>Last+1) return false;for(int j=Last;j>=i;j--)data[j]=data[j-1];data[i]=x;Last++;return true;}//删除函数template<class T>bool SeqList<T>::Remove(int i,T&x){if(Last==-1)return false;if(i<1||i>Last+1)return false;x=data[i-1];for(int j=i;j<=Last;j++)data[j-1]=data[j];Last--;return true;}//输入函数template<class T>void SeqList<T>::input(){cout<<"开始建立顺序表,请输入表中元素的最后位置:";while(1){cin>>Last;Last--;if(Last<=maxSize-1) break;cout<<"表元素个数有误,个数不能超过"<<maxSize-1<<":";}for(int i=0;i<=Last;i++){cin>>data[i];}}//输出函数template<class T>void SeqList<T>::output(){cout<<"顺序表中当前元素的最后位置为:"<<Last<<endl;for(int i=0;i<=Last;i++)cout<<data[i]<<endl;}//重载操作,顺序表整体赋值template<class T>SeqList<T> SeqList<T>::operator=(SeqList<T>& L){maxSize=L.Size();Last=L.Length()-1;data=new T[maxSize];if(data==NULL){cerr<<"存储分配错误"<<endl;exit(1);}for(int i=1;i<=Last+1;i++)data[i-1]=L.getData(i);}//合并函数,用于合并顺序表LA,LB。

结果存于LA。

重复元素只留一个。

void hebing(SeqList<int>& LA,SeqList<int>& LB){int n=LA.Length(),m=LB.Length(),k,x;for(int i=1;i<=m;i++){x=LB.getData(i);k=LA.Search(x);if(k==0){LA.Insert(n,x);n++;}}}//对合并后的顺序表进行排序void rank(SeqList<int>& L){int i,j,temp;for(i=1;i<L.Length();i++)for(j=0;j<L.Length()-i;j++){if(L.data[j]>L.data[j+1]){temp=L.data[j];L.data[j]=L.data[j+1];L.data[j+1]=temp;}}}void main(){SeqList<int>LA;//定义顺序表类对象LASeqList<int>LB;//定义顺序表类对象LBLA.input();LB.input();hebing(LA,LB);SeqList<int>LC(LA);rank(LC);LC.output();}运行结果:【实验体会】通过本次试验,我熟练掌握顺序表的定义与应用。

此次实验通过对顺序表的类定义,进行两顺序表的合并,并在合并后删除相同的元素,然后对新数组进行从小到大的排序。

因为顺序表是基于一维数组的储存,所以可以选择冒泡法进行排序。

类代码中包含三个数据成员,多个作为外部接口的成员函数,完成顺序表的搜索,定位,插入和删除等操作。

运用类模板,Seqlist的数据成员不使用固定的类型定义,而是用class说明的虚拟类型名T作为变量的类型,在定义Seqlist类的对象时,再用C++的基本类型将对象的数据成员的类型实例化。

相关文档
最新文档