线性表、栈与队列

来源:互联网 发布:百度人工智能开发平台 编辑:程序博客网 时间:2024/06/03 18:28

《大话数据结构》

线性表

基础知识

线性表:零个或多个数据元素的有限序列。关键词:序列,有限。
元素个数定义为线性表的长度,n=0时成为空表。
在较复杂的线性表中,一个数据元素可以由若干个数据项组成。
线性表的一些基本操作:初始化建立空的线性表,判断是否为空,清空,取出第i个值,查找与给定值相同的值的位置,加入新元素,删除第i个元素,返回元素个数。
对于复杂的操作,就是将基本操作组合起来。

存储

顺序存储

用一段地址连续的存储单元依次存储线性表的数据元素。
可以用C预言的一维数组来实现顺序存储结构。
顺序存储的三个属性:起始位置,最大存储容量,当前长度。
地址计算方法,随机存取结构
顺序存储中的操作:
(1)读取,直接取出第i个值即可
(2)插入,插入位置不合理或者本身的长度已经大于等于数组长度则抛出异常,其余情况,向后移动一部分数据将新数据插入第i个位置。
删除元素:如果删除位置不合理,抛出异常;取出删除元素,从删除位置开始遍历到最后一个位置,分别将它们都向前移动一个位置。表长减一。
对于顺序存储结构,存读数据时,时间复杂度都是O(1),而插入和删除时,时间复杂度是O(n)(是平均复杂度(n-1)/2化简得到)。
顺序存储的优点:无需为表示表中元素之间的逻辑关系而增加额外的存储空间,可以快速的存取表中任意位置的元素。
缺点:插入和删除操作需要移动大量元素,当线性表长度变化较大时,难以确定存储空间的容量。造成存储空间的碎片。

链式存储

存储数据元素信息的域成为数据域,存储直接后继位置的域成为指针域,指针域中的信息成为指针或者链。这两部分的信息元素的存储映像成为结点(node)。
n个结点链接成一个链表,即为线性表就的链式存储结构。此链表的每个结点只包含一个指针域,所以叫单链表。单链表通过每个结点的指针域将线性表的数据元素按其逻辑次序链接在一起。
链表中第一个结点的存储位置叫头指针,最后一个结点指针为“空”(NULL)。
头结点与头指针。
头指针是指链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针。头指针具有标识作用,所以常用头指针冠以链表的名字,无论链表是否为空,头指针均不为空。头指针是链表的必要元素。
头结点是为了操作的同意和方便而设立的,放在第一元素的结点之前,其数据域一般无意义(也可存放链表的长度),有了头结点,对在第一元素结点前插入结点和删除第一结点,其操作与其他结点的操作就统一了。头结点不一定是链表的必要因素。

原创粉丝点击