数据结构算法上课讨论

问题1:全校学生分布在整个操场上,怎么样就算是有结构了?你会怎么组织全校所有学生?逻辑结构与物理位置是什么关系?

答:站队有一定规律,如果我们要寻找到某一个人,能通过某种方法在全校学生中找到这个人,这个就算是有“结构”了。如果组织全校所有学生站队,我会给学院编号,划定学院站的位置,然后在每个学院内划分班级的位置,班级以顺序序号排队,班级内部按男女和高矮排队。此为树状结构和线性结构,物理位置即存储位置,我们按照线性结构所以物理结构是按逻辑结构算法排列学生的,即逻辑结构指导物理位置。

问题2请查阅相关资料透彻理解ADT的定义和描述方式。写出一个我们已经比较熟悉的数据类型的ADT。例如无理数、有理数、虚数等。要求包含ADT三元组。

答:抽象数据类型的定义一个实现包括储存数据元素的存储结构以及实现基本操作的算法,或者一个数学模型以及定义在此数学模型上的一组操作。

在这个数据抽象思想中,数据类型的定义和它的实现是分开的,这在软件设计中是一个重要的概念。这使得只研究和使用它的结构而不用考虑它的实现细节成为可能。

抽象数据类型描述的一般形式如下:

ADT 抽象数据类型名称 {

数据对象:……

数据关系:……

操作集合:……

操作名1 ……

……

操作名n……

}ADT抽象数据类型名称

有理数抽象数据结构的ADT

ADT Rational

{

数据对象:D = {a,b,c|a,b,cR}

数据关系:S = { a,b,cR}

基本操作:

InitRational (&T,  v1, v2, v3)

Destroy Rational (&T)

Get(T,k,&i)

Put(&T,k,i)

IsAscending(T)

Max(T,&i)

Min(T,&i)

}ADT Rational

问题3:

你能解释下列情况在计算机中实现的关键吗?1. 你用鼠标连续点击了屏幕几个不同的按钮,计算机均能够正确的一一相应。2. 你输入计算式2+3*5,计算机会正确的算出结果17,而不是像简单计算器上只能得到25。

答:1.计算机在执行程序时须先将要执行的相关程序和数据放入内存储器中,在执行程序时中央处理器根据当前程序指针寄存器的内容取出指令并执行指令,然后再取出下一条指令并执行,如此循环下去直到程序结束指令时停止执行。用鼠标连续点击了屏幕几个不同的按钮等于给计算机下达了一系列有顺序的指令,计算机就能够按顺序完成。

    2.简单计算器计算时只会按照所给指令一步一步实现计算;而计算机能把中缀表达式转换成为后缀表达式,能按照符号优先级计算计算式。

问题4:

你认为队列与栈的区别与其元素的物理位置分布有关吗?栈与队列的本质差别是什么?为什么我们需要这种差别?

答:队列与栈的区别与其元素的物理位置分布有关。同样是线性结构的,栈是一种只允许在表的一端进行插入和删除操作的线性表。只能一个一个往上放,也只能从那一头一个一个往下取。而队列是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。它是一边进一边出的,队头出列,队尾入列。栈是先进后出,队列是先进先出。我们需要栈用于符号匹配、函数调动和构造表达式,还有计算代数式。在面对现实任务时,例如用打印机时,为了防止任务冲突,我们需要创建一个队列,把任务入队,按先入先出的原则处理任务。

 

问题5:

指针是C系列语言的利器,但是它的弱点是什么?为什么很多其他语言不提供指针?如果一种编程语言不提供指针,怎么实现链式存储?

答:(1)指针指向的内存容易出错,可能会造成内存泄露,可能会导致程序崩溃。

2)应用可以跑在抽象结构上,这个结构上不需要指针;

3)以java为例,java中的引用具备了指针的功能,可以实现链式存储。另外, C#Python之类的语言没有提供指针,我们可以用静态链表来实现链表结构。虽然JavaC#在语法层面没有提供指针,但其实是在语法层面对指针进行了封装,C++ new 一个对象的语法是 A* a1 = new A(); 返回值是指针,而JavaC#的语法是A a2 = new A(); a2其实也是指针,指向对象的首地址,只是不如C++语法那么明显,从底层汇编或者机器码的角度来看,a1a2其实是完全一样的,都是指向对象地址的指针。(来源:知乎)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值