数据结构的一些摘要

来源:互联网 发布:艾蕾 知乎 编辑:程序博客网 时间:2024/05/18 04:40

1.抽象数据类型

      程序设计的基本法则之一是:例程不应超过一页。

      模块化的优点:

      1)调试小程序比调试大程序容易的多;

      2)多个人同时对一个模块式程序编程更加容易;

      3)一个写得好的模块化程序把某些依赖关系只局限在一个例程中,这样使得修改起来更加容易。

      由模块化是有益的可以推出:全局变量和副作用是有害的。

      抽象数据类型(abstract data type ADT)是一些操作的集合。对诸如表、集合、图和他们的操作一起可看作是抽象数据类型。对于集合ADT,我们有诸如并,交,测定大小以及取余等操作。或者我们也可以只要两种操作:并和查找,这两种操作又在集合上定义了一种不同的ADT

2.ADT

      几个概念:

      1)空表:大小为0的表;

      2)后继元:当前元素的后一个;

      3)前驱元:当前元素的前一个;

3.表的简单数组实现:

    对表的所有操作都可以使用数组来实现。虽然数组是动态指定的,但是还是需要对表的大小的最大值进行估算。这会导致有可能浪费大量的空间。数组实现使得PrintListFind以线性时间执行,FindKth以常数时间。而插入和删除的代价昂贵。

      因为插入和删除的运行时间是如此的慢以及表的大小必须事先已知,所以简单数组一般不用来实现表这种结构。

 4.链表

      为了避免插入和删除的线性开销,我们允许表可以不连续存储。

      链表由一系列在不必再内存中相连的结构组成。每一个结构均包含表元素和包含指向该元素后继元的Next指针。最后一个单元的Next指针指向NULLANSI C规定NULL0

5.

概念很简单,栈是一种后进先出的数据结构,而队列(Queue)则是一种先进先出的结构,

6.stack的用法

Stack使用的一个最经典的例子就是算术表达式的求值了,这其中还包括前缀表达式和后缀表达式的求值。E. W. Dijkstra发明了使用两个Stack,一个保存操作值,一个保存操作符的方法来实现表达式的求值,具体步骤如下:

1) 当输入的是值的时候Push到属于值的栈中。

2) 当输入的是运算符的时候,Push到运算符的栈中。

3) 当遇到左括号的时候,忽略

4) 当遇到右括号的时候,Pop一个运算符,Pop两个值,然后将计算结果Push到值的栈中

7.Queue的应用

在现实生活中Queue的应用也很广泛,最广泛的就是排队了,”先来后到”,以及Queue这个单词就有排队的意思。