蒸汽管路设计与模型建立的前处理程序设计外文翻译资料

 2022-10-23 10:32:18

英语原文共 18 页,剩余内容已隐藏,支付完成后下载完整资料


第二章

列表

列表,也可以称为序列,是将元素按照特定的线性顺序进行存储的容器,它是由所执行的操作决定的的。列表可支持的基本操作包括,检索元素,插入和移除指定位置的元素。栈和队列是特殊类型的列表,在它们中,插入和移除元素只能在序列的头部或序列的尾部进行。序列的基本实现可通过数组和链表的方式来得到。

2.1 列表的抽象数据类型(ADT)

列表是一个指定类型的零个或多个元素的序列。

a1, a2, . . . , an (n ge; 0)

n:列表的长度

a1:列表中的第一个元素

an:列表中的最后一个元素

n=0:空的列表

元素可以根据元素自己在列表中的位置进行线性排序。正如我们所说ai在ai 1之前的位置,ai 1跟随着ai 的位置,ai位于i的位置处。

让我们假定以下几项内容:

L :型元件类型的对象的列表

X :这种类型

P :类型位置

END(L):返回之后的位置的函数在列表L最后位置

定义以下操作:

  1. Insert (x, p, L)

在列表L的p位置上插入x元素

如果p=END(L),则在末尾插入x元素

如果L没有位置p,则结果为未定义

  1. Locate (x, L)

在L上返回x元素

返回END(L),如果x元素不存在的话

3. Retrieve (p, L)

在L上的位置p返回元素

如果p不存在或者p=END(L),则结果为未定义

4. Delete (p, L)

在L的位置p删除元素

当p= EN D(L)或者不存在,则结果为未定义

5. Next (p, L)

紧接着位置p返回位置

  1. Prev (p, L)

先于位置p返回位置

7. Makenull (L)

使L到成为一个空表,并返回位置EN D(L)

8. First (L)

返回L上的第一个位置

9.Printlist (L)

输出L的元素出现的顺序

2.1.1 使用列表抽象数据类型的程序

下面给出的程序是被用来实现列表抽象数据类型的独立的数据结构。这是面向对象的编程封装的概念下的一个例子。

目的:

去除列表中的所有重复的元素

已知:

1.表L的元素是指元素类型

2.函数same(X, Y),其中,x和y是元素类型,若x和y的元素类型相同,则函数返回true,反之,则函数返回返回false

3. p和q的类型为位置

p:位于L的当前位置

q:向前移动并寻找相同的元素

在C语言中表达的伪代码:

{

p = first (L) ;

while (p! = end(L)) {

q = next(p, L) ;

while (q! = end(L)) {

if (same (retrieve (p,L), retrieve (q, L))))

delete (q,L);

else

q = next (q, L) ;

}

p = next (p, L) ;

}

}

2.2 列表的实现

列表有许多种可能的实现方法。常用的实现方法包括:

1.数组

2.指针(单链表和双向链表等)

3.光标(整数指针数组)

2.2.1 列表的数组实现

在这里,列表中的元素被存储在数组中(连续的)的单元内。

列表是由两个成员组成的结构:

成员1:一个由单元构成的数组

成员2:末端位置 – 记录列表中最后一个元素的位置

这些位置具有整数的类型,且它们的取值范围从0到最大长度-1

# define maxlength 1000

typedef int elementtype; /lowast; elements are integers lowast;/

typedef struct list–tag {

elementtype elements [maxlength];

int last;

} list–type;

end(L)

int end (list–type lowast;ℓp)

{

return (ℓp → last 1)

}

Insert (x, p,L)

void insert (elementtype x ; int p ; list–type lowast;ℓp) ;

{

int v; /lowast; running position lowast;/

if (ℓp → last gt;= maxlength–1)

error (“list is full”)

elseif ((p lt; 0) || (p gt; ℓp → last 1))

error (position does not exist)

else

for (q = ℓp → last ; q lt;= p, q--)

ℓp → elements [q 1] = ℓp → elements [q] ;

ℓp → last = ℓp → last 1 ;

ℓp → elements [p] = x

}

Delete (p, L)

void delete (int p ; list–type lowast;ℓp)

{

int q ; /lowast; running position lowast;/

if ((p gt; ℓp → last) || (p lt; 0))

error (“position does not exist”)

else /lowast; shift elements lowast;/ {

ℓp → last minus;minus; ;

for (q = p ; q lt;= ℓp → last; q )

ℓp → elements [q] = ℓp → elements [q 1]

}

}

图2.1 单链表

Locate (x, L)

int locate (element type lowast;x ; list–type lowast;ℓp)

{

int q ;

for (q = 0 ; q lt;= ℓp → last ; q )

if (ℓp → elements [q] = = x]

return (q) ;

return (ℓp → last 1) /lowast; if not found lowast;/

}

2.2.2 列表的指针实现

在这些列表的数组实现中:

1.我们必须使用内存中的连续空间存储列表元素

2.插入以及删除元素时必须要先移动列表元素

指针虽然克服了上述的局限,但是需要到用额外的空间来存储指针。

单链表的实现

一个元素为a1, a2, hellip;, an的列表如图2.1

在此我们约定:位置i代表一个指针,它指向一个单元,该单元内的指针指向包含元素ai的那个单元(i取值为1, 2, hellip; , N)。 即

- 位置1是指向列表头部的指针

图2.2 在单链表中插入元素

- END(L)是指向列表L的最后一个单元的指针

  • 如果位置ai只是一个指向包含位置ai元素单元的指针,那么

- 位置1将表示列表头部的内存地址

- END(L)将会成为一个空指针

- Insert(X, P, L): 见图2.2

- Delete(X, L): 见图2.3

2.2.3 双向链表的实现

* 使搜索的效率提高一倍

* 需要和单元数量相等的额外指针(见图2.4);因此,插入元素和删除元素时会更加耗时,因为涉及到这些指针的赋值。

图2.3 在单链表中删除元素

图2.4 双链表结构

2.3 栈

  • 栈是一种特殊的列表,所有的元素插入和元素删除都在同一端进行,即栈顶。
  • 栈ADT是List ADT的其中一个特例。它也被称为一个LIFO列表或者下推列表。

典型的堆栈ADT操作有以下几种:

1.makenull(S)创建一个新的空栈

2. top (S) 返回堆栈的顶部的元素。

与检索操作相同retrieve(first(S),S)

3. pop (S) 删除堆栈的顶部元件

与删除操作相同 deletes(first (S), S)

4. push (x, S) 在堆叠S的顶端插入元素x

与插入操作相同 Inserts(x, first (S), S)

5.empty (S) 如果S是空的,则返回真,否则将会返回假

堆栈是一种自然来实现的子程序或过程调用和递归的数据结构。

栈的实现:数组以及指针都可以使用。参见图2.5和2.6

图2.5:堆栈ADT的数组实现方式

图2.6:链表实现栈的ADT

堆栈指针的实现:下面的代码提供了用于执行堆栈操作的指针。参见图2.7和2.8的对单链栈的push以及pop操作。

typedef struct node-tag {

item-type info ;

struct node-tag lowast; next ;

} node-type ;

typedef struct stack-tag {

node-type lowast; top ;

} stack-type ;

stack-type stack ; /lowast; define a stack lowast;/

stack-type lowast; sp = amp; stack ; /lowast; pointer to stack lowast;/

node-type lowast;np ; /lowast;

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[152640],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。