什么是面向数据结构的软件开发方法
展开全部在上个世纪60年代中期爆发了众所周知的软件危机。
为了克服这一危机,在1968、1969年连续召开的两次著名的NATO会议上提出了软件工程这一术语,并在以后不断发展、完善。
与此同时,软件研究人员也在不断探索新的软件开发方法。
至今已形成了八类软件开发方法.其中一类就是面向数据的软件开发方法:面向数据结构的软件开发方法 1、Jackson方法 1975年,M.A.Jackson提出了一类至今仍广泛使用的软件开发方法。
这一方法从目标系统的输入、输出数据结构入手,导出程序框架结构,再补充其它细节,就可得到完整的程序结构图。
这一方法对输入、输出数据结构明确的中小型系统特别有效,如商业应用中的文件表格处理。
该方法也可与其它方法结合,用于模块的详细设计。
Jackson方法有时也称为面向数据结构的软件设计方法。
2 、Warnier方法 1974年,J.D.Warnier提出的软件开发方法与Jackson方法类似。
差别有三点:一是它们使用的图形工具不同,分别使用Warnier图和Jackson图;另一个差别是使用的伪码不同;最主要的差别是在构造程序框架时,Warnier方法仅考虑输入数据结构,而Jackson方法不仅考虑输入数据结构,而且还考虑输出数据结构。
...
什么是程序设计?
什么是程序设计 话就从一个著名的公式说起:程序设计=数据结构+算法 每当我写下这个公式的时候,心中总有一种新的感悟,可是就这个程序界尽人皆知的公式却难倒了一大批想和Bill·Gates一争高下的朋友,下面我为大家解剖这个公式: “程序设计”说白了就是大家所谓编程,先不管这个词中有什么深刻的内涵,先看看等式右面的这两个名词。
按照官方的定义:数据结构即非数值计算的程序设计问题中的计算机的操作对象以及它们之间的关系和操作;算法是对特定问题求解步骤的一种描述,是对指令的有序序列。
官方的解释就是经典,可是我们看了却更糊涂了。
别急,听我给大家解释。
程序设计就像盖房子,数据结构就像砖、瓦,而算法就是设计图纸。
你若想盖房子首先必须有原料(数据结构),但是这些原料不能自动地盖起了你想要的房子;你必须按照设计图纸(算法)上的说明一砖一瓦地去砌。
这样你才能拥有你想要的房子。
程序设计也一样,你使用的编译工具(如Jave /C/Basic/Pascal等)中有各种功能语句或基本结构(如Read/Write/Real/Boolean等),它们不会自动排列成你要的程序代码。
你得按照程序规定的功能去编写,而程序的功能是实现就是算法的具体体现。
所以通俗地说:你必须按照特定的规则,把特定的功能语句和基本结构按照特定的顺序排列起来,形成一个有特定功能的程序,这就是:程序设计=数据结构+算法。
数据结构是程序设计这座大厦的基础,没有基础,无论设计有多么高明,这座大厦不可能建造起来的。
算法则是程序设计的思想,它的灵魂!没有灵魂的程序不能叫程序,只是一堆杂乱无章的符号而已。
在程序设计中,数据结构就像物质,算法就是意识。
这就像哲学上说的:意识是依赖与物质而存在的,物质是由于意识而发展。
双方是相互依存、缺一不可的!数据结构内容不多仅仅有几个系统自带的基本结构(像顺序结构、分支结构、循环结构、函数过程)数据类型(整型、实型、布尔、字符等)和用户定义的高级点的数据结构(数组、集合、文件、指针(队列、栈、树、图等)······)就这么多。
可是算法却不同了,它是多中多样的!它可以让你让数据以你想要的方式排列(当然要符合语法和功能要求^_^)。
再打个比方,数据结构是人体的各种组织、器官,算法则是人的思想。
你可以用你的思想去支配你身体的各个可以运动的器官随意运动。
如果,你想去取一个苹果,你可以走过去,也可以跑过去,只要你想,你甚至可以爬过去。
但是无论如何,你你的器官还你的器官(没有变),目的还是同一个目的(取苹果),而方式却是随心所欲!这就是算法的灵活性,不固定性。
因此可以这样说:数据结构是死的,而算法是活的!现在明白许多了吧!1、简而言之,程序设计就是把一堆指令放在一块实现某种功能。
2、计算机只能识别一种语言,就是机器语言,是由0和1组成的指令 由其它语言写的程序最终要变成二进制的机器语言计算机才能执行,这是通过编译器或解释器做的
C++中的数据结构是什么?? 比如以下一段程序中的数据结构是什么
展开全部 数据结构是一个抽象概念,是指数据在计算机中的组织方式和一系列相关的操作常见的组织方式有线性表(数组,栈,队列,链表),树,哈希表,磁盘文件等常见的操作方式有查找,插入,删除,排序而对于这些操作,通常有一些成熟的算法来支持。
具体细节,请参考《数据结构》教程你这段程序还没涉及到数据结构研究的范畴。
...
编写程序数据结构
#include #include using namespace std;int main(int argc, char* argv[]){int number = 0;cout cin >>number;float fTemp = (sqrtf(8 * number + 1) - 1) / 2; // 根据number反求nint row = fTemp;if (row != fTemp )// 判断求出来的行数fTemp是否为整数{cout cout.flush(); // 输出缓冲区清空}else{cout int *b = new int[number]; // 根据number动态分配b和c数组的空间memset(b, 0, sizeof(int) * number); // 置零int *c = new int[number];memset(c, 0, sizeof(int) * number);for (int i = 0; i {cin >>b[i];}i = 0;for (int j = 0; j {for (int k = 0; k {c[i] = b[number - (row - k) * (row - k - 1) / 2 - (row - j)]; // 计算此时的(k + 1, j + 1) 在b中的位置cout}}cout}return 0;}
数据结构是什么?
数据结构是计算机存储、组织数据的方式。
通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率的算法。
数据结构往往同高效的检索算法和索引技术有关。
数据结构在计算机科学界至今没有标准的定义。
个人根据各自的理解而有不同的表述方法:Sartaj Sahni 在他的《数据结构、算法与应用》一书中称:“数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。
这些联系可以通过定义相关的函数来给出。
”他将数据对象(data object)定义为“一个数据对象是实例或值的集合”。
Clifford A.Shaffer 在《数据结构与算法分析》一书中的定义是:“数据结构是 ADT(抽象数据类型 Abstract Data Type) 的物理实现。
” Lobert L.Kruse 在《数据结构与程序设计》一书中,将一个数据结构的设计过程分成抽象层、数据结构层和实现层。
其中,抽象层是指抽象数据类型层,它讨论数据的逻辑结构及其运算,数据结构层和实现层讨论一个数据结构的表示和在计算机内的存储细节以及运算的实现。
一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。
对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。
在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。
许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。
许多时候,确定了数据结构后,算法就容易得到了。
有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。
不论哪种情况,选择合适的数据结构都是非常重要的。
选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。
这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。
在计算机科学中,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象(数据元素)以及它们之间的关系和运算等的学科,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。
“数据结构”作为一门独立的课程在国外是从1968年才开始设立的。
1968年美国唐·欧·克努特教授开创了数据结构的最初体系,他所著的《计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作。
“数据结构”在计算机科学中是一门综合性的专业基础课。
数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。
数据结构这一门课的内容不仅是一般程序设计(特别是非数值性程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础。
计算机是一门研究用计算机进行信息表示和处理的科学。
这里面涉及到两个问题: 信息的表示 信息的处理 而信息的表示和组又直接关系到处理信息的程序的效率。
随着计算机的普及,信息量的增加,信息范围的拓宽,使许多系统程序和应用程序的规模很大,结构又相当复杂。
因此,为了编写出一个“好”的程序,必须分析待处理的对象的特征及各对象之间存在的关系,这就是数据结构这门课所要研究的问题。
众所周知,计算机的程序是对信息进行加工处理。
在大多数情况下,这些信息并不是没有组织,信息(数据)之间往往具有重要的结构关系,这就是数据结构的内容。
数据的结构,直接影响算法的选择和效率。
计算机解决一个具体问题时,大致需要经过下列几个步骤:首先要从具体问题中抽象出一个适当的数学模型,然后设计一个解此数学模型的算法(Algorithm),最后编出程序、进行测试、调整直至得到最终解答。
寻求数学模型的实质是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述。
计算机算法与数据的结构密切相关,算法无不依附于具体的数据结构,数据结构直接关系到算法的选择和效率。
运算是由计算机来完成,这就要设计相应的插入、删除和修改的算法 。
也就是说,数据结构还需要给出每种结构类型所定义的各种运算的算法。
数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并由计算机程序处理的符号的总称。
数据元素是数据的基本单位,在计算机程序中通常作为一个整体考虑。
一个数据元素由若干个数据项组成。
数据项是数据的不可分割的最小单位。
有两类数据元素:一类是不可分割的原子型数据元素,如:整数"5",字符 "N" 等;另一类是由多个款项构成的数据元素,其中每个款项被称为一个数据项。
例如描述一个学生的信息的数据元素可由下列6个数据项组成。
其中的出身日期又可以由三个数据项:"年"、"月"和"日"组成,则称"出身日期"为组合项,而其它不可分割的数据项为原子项。
关键字指的是能识别一个或多个数据元素的数据项。
若能起唯一识别作用,则称之为 "主" 关键字,否则称之为 "次" 关键字。
数据对象是性质相同的数据元素的集...
数据结构程序
展开全部 你照下面的这个 去写。
下面的这个是顺序表的基本操作,链表和这个差不多。
#include"1.h"void main(){ char a[5]={'a','b','c','d','e'}; int n=5; char f='f',b='a',e; SqList sq; InitList(sq); //初始化表 CreateList(sq,a,n); //传入数据 DispList(sq); //输出表 printf("sq.length=%d\n",ListLength(sq)); //输出表长 if(ListEmpty(sq)) //判断是否为空表 printf("sq是空表\n"); else printf("sq不是空表\n"); printf("a在第%d位\n",LocateElem(sq,b)); //按元素值查找 ListInsElem(sq,f,4); //在第4个位置上插入f元素 DispList(sq); //输出表 printf("\n"); DelElem(sq,3,e); //删除第三个元素 DispList(sq); //输出表}这是头文件1.h#includeconst MaxSize=100; typedef struct SqList { char elem[MaxSize]; int length; }SqList,*PSqList; SqList sq;void InitList(SqList &sq) //初始化线性表{ sq.length=0;}void CreateList(SqList &sq,char a[],int n) //建立表{ int i; for(i=0;isq.length) return 0; return sq.elem[i-1];}int LocateElem(SqList sq,char x) //按元素值查找{ int i=0; while(isq.length) return 0; else return i+1;}int ListInsElem(SqList &sq,char x,int i) //插入元素在第i个位置{ int j; if(isq.length+1)return 0; for(j=sq.length;j>=i;j--) sq.elem[j]=sq.elem[j-1]; sq.elem[i-1]=x; sq.length++; return 1;}int DelElem(SqList &sq,int i,char &e) //删除第i个元素{ int j; if (isq.length)return 0; e=sq.elem[i]; for(j=i;j<sq.length;j++) sq.elem[j-1]=sq.elem[j]; sq.length--; return 1;}int ListEmpty(SqList &sq) //判断表是否为空{ return(sq.length==0);}void DispList(SqList sq) //输出表{ int i; if(ListEmpty(sq))return; for(i=0;i<sq.length;i++) printf("%c\t",sq.elem[i]);}
伴我多久19634565