是不是每一个大型程序中都需要定义数据结构?不定义行不行

是不是每一个大型程序中都需要定义数据结构?不定义行不行,第1张

你好,关于你提的这两个问题,下面分2部分进行回答

是不是每一个大型程序中都需要定义数据结构?不定义行不行?

看见你提的这个问题我猜你是不是刚刚开始学“数据结构”这门课的学生?在“数据结构“课程里面强调的是各种链表和树,但实际上数据结构的概念很宽泛,任何结构体或者类形成的数据集合都是一种数据结构。链表和树只是为了方便搜索而做出的一种特殊的结构。在不用搜索功能的一些程序里,链表和树并不是必要的。

从理论上来说即使不定义任何结构体、类和联合等结构编写程序也是完全没问题的。但是在实际 *** 作中如果代码行数很大,或者文件实现的功能很复杂,只用一些零散的变量去编写是很混乱并且很艰难并且不可维护的。一般为了逻辑性和维护性考虑,都会将许多相关的数据组合成一定的结构,做成一个数据模型,用来方便 *** 作。下面做一个简单情况的代码为例,POINT是一个表示三维坐标的结构:

struct POINT{

    double x

    double y

    double z

    int color

    POINT(double xi, double yi, double zi, int c)

    {x = xi y = yi z = zi color = c}

}

以后在程序中定义及使用一个坐标点只需要

POINT point(3,4,5,RED) 

cout<<point.x<<point.y<<point.z<<point.color<<endl

如果不定义这么一个数据结构,则每次定义一个点都要重新定义4个变量,并且在使用这个点坐标时候还要去找那4个变量的变量名,如果坐标点一多,根本就没办法 *** 作困圆蠢。更何况在实际程序中许多数据结构都比上腔亮面的例子复杂的多汪陪,一层嵌套一层,如果一定不使用数据结构,那会是相当的杂乱并且不可维护。(注:上面是C++的代码,C的结构会有些不一样)

2.    C语言写的程序;若是写成了类的话。。。又是怎么样

    类是C++中的特性哦, C中只有结构和联合。没有类的概念。如果想写出类似c++中类的功能,需要使用struct和函数指针。但这是不常用的做法,不合规范安全性也不好。如果一定要用到类,建议还是使用C++。如果想要了解的话在C primer plus中有提到过这些技巧。

汇编语言程序设计步骤: 1、 分析问题,抽象出描述问题的数据模型 2、 确定问题的算法思想 3、 画出流程图或结构图 4、 分配存储器和工作单元(寄存器) 5、 逐条编写程序 6、 静态检查,上机调试 例:编程查找考生的最高分,假设所有考生分数已存入计算机内存。 1、 分析问题 根据条件、特点、规律 →数学模型 本例分数已给定为0~200之间的整数集合(考虑加试分) ,记为{S},找max{S}(注: 简单问题不一定写数学模型) 。 2、 确定算法思想 最好利用现成算法和程序设计方法,若无,则需根据实践经验总结算法思想。如本例, 从成绩单第一分数往下看,边看边比较,记住较高分,舍弃较低分,直至看完,最高分存于 脑中。归纳算法思想:建立数据指针并指向数据区首地址。将第一数取入寄存器(如AL) , 与下一数比较,若下一数大则将其取入寄存器,否则调整指针,再与下一数比较,重复上述 过程,直至比较完毕,寄存器中即最高分。 读分数用MOV指令,比较用CMP指令,分析判断用条件转移指令。 3、 画流程图或结构图 有逻辑流程、算法流程、程枯厅改序流程等,复杂问题需画模块结构。本例简单,只画出程序 流程图(用模块化结构的N-S流程图表示) : 本例的N-S流程没判图 图中初始化包括:设一个计数器,将分数个数减一后送计数器,每比较一次减一,至 零查找结束;建立一个指针指向数据区。 开始 初始化 取第一数到寄存器 与下一数比较 下一数大? 是 否 取大数到寄存器 修改指针,伏肆计数次数减一 返回到循环体开始,直到计数次数为0退出循环 结束 4、 分配存储器空间和工作单元(寄存器) 定义数据段、堆栈段、代码段等。工作单元一般用寄存器。本例:分数放数据段,建100 字节堆栈空间,BX作数据指针,CX作计数器,AL放最高分。 5、 逐条编写程序 DATA SEGMENT FEN DB 85,90,60,75,87,35,80,78,96,82…… ;存分数 MAX DB ? ;存最高分 DATA ENDS STACK SEGMENT PARA STACK ‘STACK’ DB 100 DUP(?) ;100字节堆栈 STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START PROC FAR PUSH DS MOV AX,0 PUSH AX ;为了返回DOS MOV AX,DATA MOV DS,AX ;置数据段寄存器 MOV BX,OFFSET FEN ;置数据指针 MOV CX,MAX-FEN ;置计数器初值 DEC CX ;N个分数比较N-1次 MOV AL,[BX] ;取第一个分数 LOP: INC BX ;调整指针 CMP AL,[BX] ;与下一数比较 JAE NEXT ;大于等于则转 MOV AL,[BX] ;否则取下一数 NEXT: LOOP LOP ;计数器减一, ;不为零转LOP MOV MAX,AL ;存放最高分 RET ;返回DOS START ENDP CODE ENDS END START 6、 静态检查,上机调试 选用指令尽量字节少,使其执行速度快。易错处应重点查,如比较次数、转移条件等。 确信无错后方可上机调试。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12437235.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存