非数值计算程序设计问题_第1页
非数值计算程序设计问题_第2页
非数值计算程序设计问题_第3页
非数值计算程序设计问题_第4页
非数值计算程序设计问题_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

非数值计算程序设计问题,NiklausWirth:Programs=Algorithm+DataStructures,用抽象数据类型的观点来解决数据结构的问题,越来越得到人们的重视。,百家樂百家樂整理发布,第一章绪论,一、数据结构讨论的范畴,二、基本概念,三、算法和算法的度量,一、数据结构讨论的范畴,非数值计算程序设计问题,数据的逻辑结构,数据的存储结构,二、基本概念,1.数据与数据结构,2.抽象数据类型,1.数据与数据结构,所有能被输入到计算机中,且能被计算机处理的符号的集合。,数据:,是计算机操作的对象的总称。,是计算机处理的信息的某种特定的符号表示形式。,是数据(集合)中的一个“个体”,数据元素:,是数据结构中讨论的基本单位,数据结构:,带结构的数据元素的集合,或者说,数据结构是相互之间存在着某种逻辑关系的数据元素的集合。,是研究数据的逻辑结构和物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,而且确保经过这些运算以后所得的新结构仍然是原来的结构类型,数据结构:,概括地说:,数据结构是一门讨论“描述现实世界实体的数学模型(非数值计算)及其上的操作在计算机中如何表示和实现”的学科。,数据的逻辑结构可归结为以下四类:,线性结构,树形结构,图状结构,集合结构,数据的存储结构,逻辑结构在存储器中的映象,“数据元素”的映象?,“关系”的映象?,关系的映象方法:,顺序映象,用一组地址连续的存储单元依次存储数据元素,链式映象,以附加信息(指针)表示后继关系,需要用一个和x在一起的附加信息指示y的存储位置,yx,2.抽象数据类型(AbstractDataType简称ADT),是指一个数学模型以及定义在此数学模型上的一组操作。,三、算法和算法的衡量,1.算法,2.算法设计的原则,3.算法效率的衡量方法和准则,4.算法的存储空间需求,算法是对解决某类问题的方法的一种描述。一个算法必须满足以下五个重要特性:,1有穷性2确定性3可行性4有输入5有输出,随着问题规模n的增长,算法执行时间的增长率和f(n)的增长率相同。,T(n)=O(f(n),渐近时间复杂度,第二章线性表,线性表的概念,-基本操作算法实现,-顺序存储,-链式存储,顺序映象方法是:逻辑关系相邻,物理位置相邻.,用一组地址连续的存储单元依次存放线性表中的数据元素,constintMaxSize=50;,structListElemTypelistMaxSize;intsize;/当前线性表长度;,线性表顺序存储结构,一、有关空表的操作,1.初始化操作,2.清空操作,3.判空操作,*当前线性表长度*,二、有关查找的操作,2.查找具有给定值的元素,1.遍历线性表操作,3.更新表中具有给定值的元素,从表头元素起依次访问每一个元素,并且每个元素只被访问一次,L.list0,最后一个,L.listL.size-1,三、有关插入的操作,3.插在i位置操作,2.表头插入一个元素,1.末尾添加一个元素,后移,for(intj=L.size;jdata=e;/生成新结点s-next=p-next;p-next=s;/插入,s,p,q=p-next;p-next=q-next;e=q-data;deleteq;,p,q,逆位序输入建立带头结点的单链表,一、建立一个“空表”;,二、输入数据元素an;,三、输入数据元素an-1,建立结点并前插;,四、依次类推,直至输入a1为止。,L-next=p;,p-next=L-next;,最后一个结点的指针域的指针又指回第一个结点,循环链表,a1a2an,判别链表中最后一个结点的条件不再是“后继是否为空”,而是“后继是否为头结点”。,s-right=p-right;p-right=s;s-right-left=s;s-left=p;,p,s,插入,双向链表,删除,p-right=p-right-right;p-right-left=p;,p,第三章稀疏矩阵和广义表,压缩存储方法:,一、三元组顺序表,二、带行指针向量的链接存储,三、十字链表,稀疏矩阵的概念,原矩阵,转置后矩阵,一、三元组顺序表用“三元组”表示实现矩阵转置,需要把具有相同行号的三元组结点按照列号从小到大的顺序链接成一个单链表,每个三元组结点的类型可定义为:,二、带行指针向量的链接存储,rowcolvalnext,三元组,三、十字链表,cv,rv,1,1,3,1,4,5,2,2,-1,3,1,2,广义表的概念,广义表是递归定义的线性结构,广义表是多层次的线性结构,广义表结构的特点:,数据元素有相对次序;2)长度为最外层包含元素个数;3)深度为所含括弧的重数;原子:深度为0;空表:深度为1;4)可以共享;5)可以是一个递归的表。,广义表的存储结构,采用头、尾指针的链表结构,表结点:原子结点:,广义表的运算,递归函数含直接或间接调用本函数语句的函数,2.求广义表的深度,1.求广义表长度,1.求广义表长度的递归算法intLenth(GLNode*GL)if(GL!=NULL)return1+Lenth(GL-next);elsereturn0;,非递归算法如下:intLenth(GLNode*GL)intlen=0;while(GL!=NULL)len+;GL=GL-next;returnlen;,深度=Max子表的深度+1,2.求广义表的深度,可以直接求解的两种简单情况为:空表的深度=1原子的深度=0,将广义表分解成n个子表,分别(递归)求得每个子表的深度,,1,1,1,L,while(L!=NULL)if(L-tag=true)intdep=Depth(L-sublist);if(depmax)max=dep;L=L-next;,L,L-sublist,L,L,L-sublist,L-sublist,第四章栈和队列,栈的应用举例,例一、数制转换例二、括号匹配的检验,表达式求值,递归,表达式求值,后缀式:abcde/f+,后缀式算符在式中出现的顺序恰为表达式的运算顺序;每个运算符和在它之前出现且紧靠它的两个操作数构成一个最小表达式。,如何从后缀式求值?,先找运算符,再找操作数,设立操作数栈,如何从中缀式转换成后缀式?,设立操作符栈,栈与递归,实现递归函数,必须利用“栈”。一个递归函数必定能改写为利用栈实现的非递归函数;反之,一个用栈实现的非递归函数可以改写为递归函数。,递归函数中的尾递归容易消除。,队列的定义,链队列链式映象,循环队列顺序映象,求余:X%QueueMaxSize结果在0QueueMaxSize-1之间,Q.rear=(Q.rear+1)%QueueMaxSize;,Q.front=(Q.front+1)%QueueMaxSize;,1,0,2,3,4,5,6,7,8,9,QueueMaxSize-1,.,将新元素item的值插入到队尾voidQinsert(QueueType,循环队列的基本操作:,structLNodeElemTypedata;LNode*next;,队列的链接存储结构,链队列类型structLinkQueueLNode*front;/队头指针LNode*rear;/队尾指针;,a1,an,Q.frontQ.rear,a2,a1,an,Q.frontQ.rear,a2,进队(向链队中插入一个元素),an+1/,Q.rear-next=newptr;Q.rear=newptr;,newptr,a1,an,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论