第5篇 数据结构
第20章 线性表、堆栈、队列、树和堆
学习目标
•描述什么是数据结构(20.1节)。
•说明数组的局限性(20.1节)���
•使用数组设计并实现动态线性表(20.2.1节)。
•用链表结构设计并实现动态线性表(20.2.2节)。
•用数组线性表设计并实现堆栈(20.3节)。
•用链表设计并实现队列(20.3节)。
•二叉查找树的设计与实现(20.4节,可选)。
•堆的设计与实现(20.5节,可选)。
•优先队列的设计与实现(20.6节,可选)。
20.1引言
数据结构是按某种方式组织的数据集合。数据结构不仅存储数据,而且支持处理该结构中数据的访问与操作。例如,数组是一种顺序组织的数据结构。我们可以获取数组的大小,可以存储、检索和修改数组中的数据。数组简单易用,但是它有两个局限:(1)数组一旦创建,它的大小就无法改变;(2)数组不提供适当地插入与删除操作。在本章中,将介绍在运行时可以扩展和缩小的动态数据结构。9.9节介绍的ArrayList就是动态数据结构的例子。我们之前曾使用过这个类,本章将学习如何对其进行设计与实现。
本章将介绍线性表、堆栈、队列、二叉树和堆等五种经典的动态数据结构。线性表(1ist)是一个顺序存储的数据集合,它支持在表中任何位置进行插入和删除操作。堆栈(stack)可以看做是一种特殊的线性表,它只允许在线性表的一端进行插入和删除操作,这一端通常称为堆栈的栈顶(top)。队列(queue)表示一个排队等候的队伍,它允许在队伍的后端进行插入操作(这一湍也称为队尾),在队伍的前端进行删除操作(这一端也称为队首)。二叉树(binary tree)是一种能够有效地进行数据的查找、排序、插入和删除等操作的数据结构。堆(heap)是一种可用于开发有效排序和优先队列算法的数据结构。
……