北理工数据结构实验报告4
北京理工大学汇编第四次(分支和循环程序设计实验)报告

北京理工大学汇编第四次(分支和循环程序设计实验)报告汇编第四次(分支和循环程序设计实验)报告一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言分支程序基本指令的使用方法;3.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法;4.了解汇编语言循环程序设计的基本流程;5.熟悉汇编语言循环基本指令的使用方法;6.掌握利用汇编语言的循环指令完成循环程序设计方法。
二、软硬件环境1、硬件环境:计算机系统 windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识在实际应用中,经常根据一些条件来选择一条分支执行。
汇编语言的条件判断主要是通过状态寄存器中的状态位、无符号数相减或有符号相减产生的结果来进行。
1.无条件转移指令JMP无条件转移指令JMP是使程序无条件转移至目标处,又分为段内转移、段间转移。
2.条件转移指令JXX条件转移指令可分为三大类:1).简单条件转移指令。
根据单个标志位的状态判断转移条件。
下表表示条件转移指令标志位的状态:2).无符号数条件转移指令。
假设在条件转移指令前使用比较指令,比较两个无符号数A,B,指令进行的的操作是A-B,其转移指令如下:3)带符号数条件转移指令。
在汇编程序设计中,要熟练使用循环指令和跳转指令等来实现循环,理解循环体结构中的初始化部分、循环体、结束部分,并且要结合前面分支结构相关的知识点,加深对循环结构的理解和掌握。
循环结构的组成及其设计方法的知识要点有:1、循环程序的基本结构通常由3部分组成1) 初始化部分建立循环初始值,为循环做准备,如设置地址指针,(BX/SI/DI/BP),初始化循环控制变量或计数器(CX),数据寄存器(AX/DX)初值等.2) 循环体循环体是循环程序的主体,是程序中重复执行的程序段.它是由循环工作部分、修改部分、和循环控制部分。
①循环工作部分:完成程序功能的主要程序段,用于解决程序的实际任务;②修改部分:对循环参数进行修改,并为下一次循环做准备;③循环控制部分:判断循环结束条件是否满足。
数据结构实验报告4

数据结构实验报告——实验4学号::得分:______________一、实验目的1、复习线性表的逻辑结构、存储结构及基本操作;2、掌握顺序表和(带头结点)单链表;3、了解有序表。
二、实验容1、(必做题)假设有序表中数据元素类型是整型,请采用顺序表或(带头结点)单链表实现:(1)OrderInsert(&L, e, int (*compare)(a, b))//根据有序判定函数compare,在有序表L的适当位置插入元素e;(2)OrderInput(&L, int (*compare)(a, b))//根据有序判定函数compare,并利用有序插入函数OrderInsert,构造有序表L;(3) OrderMerge(&La, &Lb, &Lc, int (*compare)())//根据有序判定函数compare,将两个有序表La和Lb归并为一个有序表Lc。
2、(必做题)请实现:(1)升幂多项式的构造,升幂多项式是指多项式的各项按指数升序有序,约定系数不能等于0,指数不能小于0;(2)两个升幂多项式的相加。
三、算法描述(采用自然语言描述)1.创建带头节点的链表,输入两个有序表数据La Lb归并两个有序表得有序表Lc输出三个有序表输入需插入数据e将e插入有序表Lc输出插入e后的Lc2.创建链表按指数升序输入多项式得序数和指数输出多项式按指数升序输入第二个多项式得序数和指数两个多项式相加输出第二个多项式和两个多项式得和四、详细设计(画出程序流程图)1.2.五、程序代码(给出必要注释)1.#include<stdio.h>#include<malloc.h>typedef struct LNode{int date;struct LNode *next;} LNode,*Link;typedef struct LinkList{Link head;//头结点int lenth;//链表中数据元素的个数} LinkList;int compare (LinkList *L,int e)//有序判定函数 compare {int Lc=0;Link p;p=L->head;p=p->next;while(p!=NULL){if(e>p->date){p=p->next;Lc++;}elsereturn Lc;}return Lc;}void OrderInsert (LinkList *L,int e,int (*compare)())//根据有序判定函数compare,在有序表L 的适当位置插入元素e;{Link temp,p,q;int Lc,i;temp=(Link)malloc(sizeof(LNode));temp->date=e;p=q=L->head;p=p->next;Lc=(*compare)(L,e);if(Lc==L->lenth){while(q->next!=NULL){q=q->next;}q->next=temp;temp->next=NULL;}else{for(i=0; i<Lc; i++){p=p->next;q=q->next;}q->next=temp;temp->next=p;}++L->lenth;}void OrderMerge (LinkList *La,LinkList *Lb,int (*compare)())//根据有序判定函数 compare ,将两个有序表 La 和 Lb 归并为一个有序表{int i,Lc=0;Link temp,p,q;q=La->head->next;while(q!=NULL){p=Lb->head;temp=(Link)malloc(sizeof(LNode));temp->date=q->date;Lc=(*compare)(Lb,q->date);if(Lc==Lb->lenth){while(p->next!=NULL){p=p->next;}p->next=temp;temp->next=NULL;}else{for(i=0; i<Lc; i++){p=p->next;}temp->next=p->next;p->next=temp;}q=q->next;++Lb->lenth;}}LinkList *Initialize (LinkList *NewList){int i;Link temp;NewList=(LinkList *)malloc((2+1)*sizeof(LinkList));for(i=0; i<2+1; i++){temp=(Link)malloc(sizeof(LNode));temp->date=0;temp->next=NULL;(NewList+i)->head=temp;(NewList+i)->lenth=0;}return NewList;}void Insert (LinkList *NewList){int a,i;char c;printf("在第1个表中插入数据,输入“ N ”再对下个表插入数据 \n");for(i=0; i<2; i++){while(1){scanf("%d",&a);c=getchar();if(c=='N'){if(i<2-2)printf("在第 %d个表中插入数据,输入“ N ”再对下个表插入数据 \n",i+2); else if(i==2-2)printf("在第 %d个表中插入数据,输入“ N ”结束。
数据结构实验报告

数据结构实验报告引言:本实验旨在通过对数据结构的学习和实践,加深对数据结构的理解和运用能力。
在本实验中,我们将探索各种数据结构的特点、优势和适用场景,并通过实验验证它们的效果和性能。
本报告将详细介绍实验的目的、实验设计和实验结果,以及对结果的分析和总结。
一、实验目的:本实验的主要目的是帮助学生理解和掌握以下内容:1. 数据结构的基本概念和分类;2. 各种数据结构的特点、优势和适用场景;3. 数据结构的实现方式和算法;4. 数据结构的性能分析和优化。
二、实验设计:1. 实验环境:本次实验使用的编程语言为C++,开发环境为Visual Studio。
2. 实验内容:本次实验包括以下几个部分:(1)线性表的实现和应用;(2)栈和队列的实现和应用;(3)树和图的实现和应用;(4)排序和查找算法的实现和应用。
3. 实验步骤:(1)根据实验要求,选择合适的数据结构进行实现;(2)编写相应的代码,并进行调试;(3)运行程序,测试数据结构的功能和性能;(4)根据实验结果进行分析和总结。
三、实验结果:1. 线性表的实现和应用:在本次实验中,我们实现了顺序表和链表两种线性表结构,并对它们进行了性能测试。
通过测试,我们发现顺序表适用于频繁进行查找操作的场景,而链表适用于频繁进行插入和删除操作的场景。
2. 栈和队列的实现和应用:我们实现了栈和队列两种数据结构,并进行了相应的性能测试。
通过测试,我们发现栈适用于需要实现后进先出(LIFO)的场景,而队列适用于需要实现先进先出(FIFO)的场景。
3. 树和图的实现和应用:我们实现了二叉树和图两种数据结构,并进行了相应的性能测试。
通过测试,我们发现二叉树适用于需要进行快速查找和排序的场景,而图适用于需要表示复杂关系和网络结构的场景。
4. 排序和查找算法的实现和应用:我们实现了常见的排序和查找算法,并进行了相应的性能测试。
通过测试,我们发现快速排序和二分查找算法在大规模数据处理中具有较高的效率和性能。
北京理工大学数据结构实验报告2

《数据结构与算法统计》实验报告学院:班级:学号:姓名:一、实验目的⑴熟悉VC++6.0环境,学习使用C++实现栈的存储结构;⑵通过编程、上机调试,进一步理解栈的基本概念;⑶锻炼动手编程,独立思考的能力。
二、实验内容实现简单计算器的功能,请按照四则运算加、减、乘、除、幂(^)和括号的优先关系和惯例,编写计算器程序。
要求支持运算符:+、-、*、/、%、()和=:①从键盘输入一个完整的表达式,以回车作为表达式输入结束的标志;②输入表达式中的数值均为大于等于零的整数,如果中间计算过程中出现小数也只取整进行计算。
例如,输入:4+2*5= 输出:14输入:(4+2)*(2-10)= 输出:-48三、程序设计1、概要设计为实现上述功能,应使用两个栈,分别寄存操作数和运算符。
为此需要栈的抽象数据结构。
⑴栈的抽象数据类型定义如下:ADT Stack{数据对象:D = { ai | ai ∈ElemSet, i=1,…,n,n≥0 }数据关系:R1 = { <ai-1, ai> | ai-1,ai ∈D, i=2, …,n }基本操作:InitStack1(SqStack1 &S)操作结果:创建一个空栈S,以存储运算符InitStack2(SqStack2 &S)操作结果:创建一个空栈S,以存储操作数Push1(SqStack1 &S,char e)初始条件:栈S已存在操作结果:插入运算符e作为新的栈顶元素Push2(SqStack2 &S,int e)初始条件:栈S已存在操作结果:插入操作数e作为新的栈顶元素Precede(char d,char c)初始条件:d,c为运算符操作结果:若d优先级大于c,返回>;若d优先级小于c,返回<;若d优先级等于c,返回=;GetTop1(SqStack1 &S)初始条件:栈S已存在且非空操作结果:用e返回寄存运算符栈S的栈顶元素GetTop2(SqStack2 &S)初始条件:栈S已存在且非空操作结果:用e返回寄存操作数栈S的栈顶元素Pop1(SqStack1 &S,char &e)初始条件:栈S已存在且非空操作结果:删除寄存运算符栈S的栈顶元素Pop2(SqStack2 &S,int &e)初始条件:栈S已存在且非空操作结果:删除寄存操作数栈S的栈顶元素Operate(int a,char theta,int b)初始条件:a,b为整数,theta为运算符操作结果:返回a与b运算的结果EvaluateExpression()初始条件:输入合法的表达式操作结果:返回表达式的值}ADT Stack⑵主程序流程调用EvaluateExpression()函数计算表达式的值,输出在屏幕上。
北理工数据结构实验四

对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,通力根1保过据护管生高线产中敷工资设艺料技高试术中卷0资不配料仅置试可技卷以术要解是求决指,吊机对顶组电层在气配进设置行备不继进规电行范保空高护载中高与资中带料资负试料荷卷试下问卷高题总中2体2资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况1卷中下安,与全要过,加度并强工且看作尽护下可1都关能可于地以管缩正路小常高故工中障作资高;料中对试资于卷料继连试电接卷保管破护口坏进处范行理围整高,核中或对资者定料对值试某,卷些审弯异核扁常与度高校固中对定资图盒料纸位试,置卷编.工保写况护复进层杂行防设自腐备动跨与处接装理地置,线高尤弯中其曲资要半料避径试免标卷错高调误等试高,方中要案资求,料技编试术写5、卷交重电保底要气护。设设装管备备置线4高、调动敷中电试作设资气高,技料课中并3术试、件资且中卷管中料拒包试路调试绝含验敷试卷动线方设技作槽案技术,、以术来管及避架系免等统不多启必项动要方高式案中,;资为对料解整试决套卷高启突中动然语过停文程机电中。气高因课中此件资,中料电管试力壁卷高薄电中、气资接设料口备试不进卷严行保等调护问试装题工置,作调合并试理且技利进术用行,管过要线关求敷运电设行力技高保术中护。资装线料置缆试做敷卷到设技准原术确则指灵:导活在。。分对对线于于盒调差处试动,过保当程护不中装同高置电中高压资中回料资路试料交卷试叉技卷时术调,问试应题技采,术用作是金为指属调发隔试电板人机进员一行,变隔需压开要器处在组理事在;前发同掌生一握内线图部槽 纸故内资障,料时强、,电设需回备要路制进须造行同厂外时家部切出电断具源习高高题中中电资资源料料,试试线卷卷缆试切敷验除设报从完告而毕与采,相用要关高进技中行术资检资料查料试和,卷检并主测且要处了保理解护。现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
北京理工大学-实验四--实验报告表

RAM把第一个操作数存放在哪个寄存器上,通过哪组总线传送给CPU
:
数据存储器 DBΒιβλιοθήκη CPU把取到的第一个操作数存放在哪里
GR
步骤5 加法计算
CPU把两个加数放入哪里进行加法运算
ALU 计算器
当两个加数相加结束后,CPU把相加结果存放在哪里
加数一所在的通用寄存器中
00000034
RAM中加数一的编码与内存地址
00000000000011000036
步骤2 取指令
CPU使用哪根总线将PC中的内存地址送至RAM
AB
RAM将CPU传来的指令地址存储在哪里
地址储存器
MAR中存放的是什么具体的二进制编码是什么
指令编码0001110100110110
#
MAR中二进制编码对应的内存地址是什么该内存地址中存放了什么数据该数据放在哪个寄存器中
000A 指令编码 指令寄存器
PC被访问后其中的内容发生了什么变化为什么
PC中的指令地址自动加一
因为这一指令执行完要执行下一次指令
RAM将MDR中的数据通过哪条总线传送给力CPU
DB
CPU将RAM传来的指令存放在哪里
指令寄存器 IR
IR中存放的指令二进制编码是什么
0001 110100 110110
¥
步骤3 指令译码
IR中的操作码和两个操作数的内存地址分别是什么(请分别用用六位二进制数和四位十六进制表示)
0000010001
操作数1:110100 0034
操作数2:110110 0036
译码在哪里进行并通过哪组总线把该操作传递给RAM
CU控制器 CB
步骤4 取数据
CPU通过哪组总线传送地址RAM将这个地址存放在哪里
数据结构 实验报告

数据结构实验报告一、实验目的数据结构是计算机科学中非常重要的一门课程,通过本次实验,旨在加深对常见数据结构(如链表、栈、队列、树、图等)的理解和应用,提高编程能力和解决实际问题的能力。
二、实验环境本次实验使用的编程语言为C++,开发工具为Visual Studio 2019。
操作系统为 Windows 10。
三、实验内容1、链表的实现与操作创建一个单向链表,并实现插入、删除和遍历节点的功能。
对链表进行排序,如冒泡排序或插入排序。
2、栈和队列的应用用栈实现表达式求值,能够处理加、减、乘、除和括号。
利用队列实现银行排队系统的模拟,包括顾客的到达、服务和离开。
3、二叉树的遍历与操作构建一棵二叉树,并实现前序、中序和后序遍历。
进行二叉树的插入、删除节点操作。
4、图的表示与遍历用邻接矩阵和邻接表两种方式表示图。
实现图的深度优先遍历和广度优先遍历。
四、实验步骤及结果1、链表的实现与操作首先,定义了链表节点的结构体:```cppstruct ListNode {int data;ListNode next;ListNode(int x) : data(x), next(NULL) {}};```插入节点的函数:```cppvoid insertNode(ListNode& head, int val) {ListNode newNode = new ListNode(val);head = newNode;} else {ListNode curr = head;while (curr>next!= NULL) {curr = curr>next;}curr>next = newNode;}}```删除节点的函数:```cppvoid deleteNode(ListNode& head, int val) {if (head == NULL) {return;}ListNode temp = head;head = head>next;delete temp;return;}ListNode curr = head;while (curr>next!= NULL && curr>next>data!= val) {curr = curr>next;}if (curr>next!= NULL) {ListNode temp = curr>next;curr>next = curr>next>next;delete temp;}}```遍历链表的函数:```cppvoid traverseList(ListNode head) {ListNode curr = head;while (curr!= NULL) {std::cout << curr>data <<"";curr = curr>next;}std::cout << std::endl;}```对链表进行冒泡排序的函数:```cppvoid bubbleSortList(ListNode& head) {if (head == NULL || head>next == NULL) {return;}bool swapped;ListNode ptr1;ListNode lptr = NULL;do {swapped = false;ptr1 = head;while (ptr1->next!= lptr) {if (ptr1->data > ptr1->next>data) {int temp = ptr1->data;ptr1->data = ptr1->next>data;ptr1->next>data = temp;swapped = true;}ptr1 = ptr1->next;}lptr = ptr1;} while (swapped);}```测试结果:创建了一个包含 5、3、8、1、4 的链表,经过排序后,输出为 1 3 4 5 8 。
数据结构实验报告

数据结构实验报告一、实验目的本实验旨在通过对数据结构的学习和实践,掌握基本的数据结构概念、原理及其应用,培养学生的问题分析与解决能力,提升编程实践能力。
二、实验背景数据结构是计算机科学中的重要基础,它研究数据的存储方式和组织形式,以及数据之间的关系和操作方法。
在软件开发过程中,合理选用和使用数据结构,能够提高算法效率,优化内存利用,提升软件系统的性能和稳定性。
三、实验内容本次实验主要涉及以下几个方面的内容:1.线性表的基本操作:包括线性表的创建、插入、删除、查找、修改等操作。
通过编程实现不同线性表的操作,掌握它们的原理和实现方法。
2.栈和队列的应用:栈和队列是常用的数据结构,通过实现栈和队列的基本操作,学会如何解决实际问题。
例如,利用栈实现括号匹配,利用队列实现银行排队等。
3.递归和回溯算法:递归和回溯是解决很多求解问题的常用方法。
通过编程实现递归和回溯算法,理解它们的思想和应用场景。
4.树和二叉树的遍历:学习树和二叉树的遍历方法,包括前序、中序和后序遍历。
通过编程实现这些遍历算法,加深对树结构的理解。
5.图的基本算法:学习图的基本存储结构和算法,包括图的遍历、最短路径、最小生成树等。
通过编程实现这些算法,掌握图的基本操作和应用。
四、实验过程1.具体实验内容安排:根据实验要求,准备好所需的编程环境和工具。
根据实验要求逐步完成实验任务,注意记录并整理实验过程中遇到的问题和解决方法。
2.实验数据采集和处理:对于每个实验任务,根据要求采集并整理测试数据,进行相应的数据处理和分析。
记录实验过程中的数据和结果。
3.实验结果展示和分析:将实验结果进行适当的展示,例如表格、图形等形式,分析实验结果的特点和规律。
4.实验总结与反思:总结实验过程和结果,回顾实验中的收获和不足,提出改进意见和建议。
五、实验结果与分析根据实验步骤和要求完成实验任务后,得到了相应的实验结果。
对于每个实验任务,根据实验结果进行适当的分析。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构与算法设计》实验报告——实验四学院:自动化学院班级:____学号:__姓名:____ ____一、实验目的1、熟悉VC 环境,学习使用C 语言实现链表的存储结构。
2、通过编程、上机调试,进一步理解线性表、链表、环表的基本概念。
3、锻炼动手编程,独立思考的能力。
二、实验内容从键盘输入10个数,编程实现分别用插入排序、交换排序、选择排序算法进行排序,输出排序后的序列。
三、程序设计1、概要设计为实现上述程序功能,应用线性表寄存数字序列。
为此,需要线性表的抽象数据结构。
(1)、线性表的抽象数据类型定义为:ADT SqList{数据对象:D={|,1,2,,,0}i i a a ElemSet i n n ∈=≥数据关系:R1=11{,|,,1,2,,}i i i i a a a a D i n --<>∈= 基本操作:CreateList(&L)操作结果:构造一个线性表L 。
ShowList(&L)初始条件:线性表L 已存在。
操作结果:按顺序在屏幕上输出L 的数据元素。
InsertSort(&L)初始条件:线性表L 已存在。
操作结果:对L 的数据元素进行插入排序。
QuickSort(&L)初始条件:线性表L 已存在。
操作结果:对L 的数据元素进行快速排序。
SelectSort(&L)初始条件:线性表L 已存在。
操作结果:对L 的数据元素进行选择排序。
}ADT SqList(2)、宏定义#define MAXSIZE 10#define OVERFLOW -2#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0(3)、主程序流程主程序首先调用CreateList(l1)函数创建顺序表l1。
随后调用InsertSort(l1)、QuickSort(l2)、SelectSort(l3)函数计算三种排序结果,并调用相应的ShowList()函数显示排序结果。
(4)、模块调用关系:由主函数模块调用创建模块,显示模块与计算模块。
(5)、流程图2、详细设计(1)、数据类型设计typedef int Status;typedef int ElemType; //定义数据元素类型typedef struct{ElemType r[MAXSIZE+1];int length;}SqList; //定义顺序表类型(2)、操作算法设计Status CreateList(SqList &L){//创建顺序表L.length=0;for(int i=1;i<=MAXSIZE;i++){scanf("%d",&L.r[i]);L.length++;}return OK;}Status ShowList(SqList &L){//显示顺序表的内容for(int i=1;i<=MAXSIZE;i++)printf("%d ",L.r[i]);return OK;}void InsertSort(SqList &L){//插入排序for(int i=2;i<=L.length;++i)if(L.r[i]<L.r[i-1]){ //需将L.r[i]插入有序子表L.r[0]=L.r[i]; //复制为哨兵L.r[i]=L.r[i-1];for(int j=i-2;L.r[0]<L.r[j];--j)L.r[j+1]=L.r[j]; //记录后移L.r[j+1]=L.r[0]; //插入到正确位置}}int Partition(SqList &L, int low, int high){//一趟快速排序L.r[0]=L.r[low]; //用子表第一个记录做枢轴元素int pivotkey=L.r[low]; //枢轴记录关键字while(low<high){ //从两端交替向中间扫描while(low<high && L.r[high]>=pivotkey) --high;L.r[low]=L.r[high]; //将记录小的移到低端while(low<high && L.r[low]<=pivotkey) ++low;L.r[high]=L.r[low]; //将记录大的移到高端}L.r[low]=L.r[0]; //枢轴记录到位return low; //返回枢轴位置}void QSort(SqList &L,int low,int high){//对[low,high]做快速排序if(low<high){ //长度大于1int pivotloc=Partition(L,low,high); //一分为二QSort(L,low,pivotloc-1); //对低子表递归排序QSort(L,pivotloc+1,high); //对高子表递归排序}}void QuickSort(SqList &L){//对L快速排序QSort(L,1,L.length);}void SelectSort(SqList &L){//对L选择排序for(int i=1;i<L.length;++i){ //选择第i小记录并交换到位int k=i;for(int j=i+1;j<=L.length;j++)if(L.r[j]<L.r[k])k=j;if(k!=i){L.r[0]=L.r[i];L.r[i]=L.r[k];L.r[k]=L.r[0]; //与第i个元素交换}}}(3)、主函数设计int main(){//主程序SqList l1,l2,l3;printf("Please input 10 numbers:\n");CreateList(l1); //创建线性表l1l2=l1;l3=l1;InsertSort(l1); //对l1插入排序printf("The result of InsertSort is:\n");ShowList(l1);printf("\n");QuickSort(l2); //对l2快速排序printf("The result of QuickSort is:\n");ShowList(l2);printf("\n");SelectSort(l3); //对l3选择排序printf("The result of SelectSort is:\n");ShowList(l3);printf("\n");return 0;}四、程序调试分析1、由于对于快速排序理解不深,开始时出现了许多细节问题,导致排序结果不正常,经过修改后得以解决。
2、在选择排序中,由于不细心,误将”<”打为”<=”导致结果不正常。
3、在快速排序中,一些后引入的变量,例如pivotkey没有声明,导致编译失败。
五、用户使用说明1、本程序的运行环境为DOS操作系统,执行文件为:Sort.exe。
2、进入程序后,在Please input 10 numbers:后输入所需排序的十个整数,回车运行程序。
3、程序运行后即在屏幕上输出计算结果。
六、程序运行结果1、2、七、程序清单#define MAXSIZE 10#define OVERFLOW -2#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#include"stdio.h"#include"stdlib.h"typedef int Status;typedef int ElemType; //定义数据元素类型typedef struct{ElemType r[MAXSIZE+1];int length;}SqList; //定义顺序表类型Status CreateList(SqList &L){//创建顺序表L.length=0;for(int i=1;i<=MAXSIZE;i++){scanf("%d",&L.r[i]);L.length++;}return OK;}Status ShowList(SqList &L){//显示顺序表的内容for(int i=1;i<=MAXSIZE;i++)printf("%d ",L.r[i]);return OK;}void InsertSort(SqList &L){//插入排序for(int i=2;i<=L.length;++i)if(L.r[i]<L.r[i-1]){ //需将L.r[i]插入有序子表L.r[0]=L.r[i]; //复制为哨兵L.r[i]=L.r[i-1];for(int j=i-2;L.r[0]<L.r[j];--j)L.r[j+1]=L.r[j]; //记录后移L.r[j+1]=L.r[0]; //插入到正确位置}}int Partition(SqList &L, int low, int high){//一趟快速排序L.r[0]=L.r[low]; //用子表第一个记录做枢轴元素int pivotkey=L.r[low]; //枢轴记录关键字while(low<high){ //从两端交替向中间扫描while(low<high && L.r[high]>=pivotkey) --high;L.r[low]=L.r[high]; //将记录小的移到低端while(low<high && L.r[low]<=pivotkey) ++low;L.r[high]=L.r[low]; //将记录大的移到高端}L.r[low]=L.r[0]; //枢轴记录到位return low; //返回枢轴位置}void QSort(SqList &L,int low,int high){//对[low,high]做快速排序if(low<high){ //长度大于1int pivotloc=Partition(L,low,high); //一分为二QSort(L,low,pivotloc-1); //对低子表递归排序QSort(L,pivotloc+1,high); //对高子表递归排序}}void QuickSort(SqList &L){//对L快速排序QSort(L,1,L.length);}void SelectSort(SqList &L){//对L选择排序for(int i=1;i<L.length;++i){ //选择第i小记录并交换到位int k=i;for(int j=i+1;j<=L.length;j++)if(L.r[j]<L.r[k])k=j;if(k!=i){L.r[0]=L.r[i];L.r[i]=L.r[k];L.r[k]=L.r[0]; //与第i个元素交换}}}int main(){//主程序SqList l1,l2,l3;printf("Please input 10 numbers:\n"); CreateList(l1); //创建线性表l1l2=l1;l3=l1;InsertSort(l1); //对l1插入排序printf("The result of InsertSort is:\n"); ShowList(l1);printf("\n");QuickSort(l2); //对l2快速排序printf("The result of QuickSort is:\n"); ShowList(l2);printf("\n");SelectSort(l3); //对l3选择排序printf("The result of SelectSort is:\n"); ShowList(l3);printf("\n");return 0;}。