数组题汇总

1.线性表是________。

一个有限序列,可以为空
一个有限序列,不可以为空
一个无限序列,可以为空
一个无限序列,不可以为空
解答:线性表有头和尾,类似线段,初始值可以为空。

2 设数组a[]作为循环队列SQ的存储空间,数组的长度为m,f为队头指示,r为队尾指示则执行出队操作的语句为

f=f+1
f=(f+1)%m
r=(r+1)%m
f=(f+1)%(m+1)

解析:f=(f+1)%m

循环队列

为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。这种循环队列可以以单链表的方式来在实际编程应用中来实现。

链表和单链表

以链接方式存储的线性表简称为链表(Linked List)。链表是一种数据结构,和数组同级。比如,Java中我们使用的ArrayList,其实现原理是数组。而LinkedList的实现原理就是链表了。链表在进行循环遍历时效率不高,但是插入和删除时优势明显。链表中的数据是以结点来表示的,每个结点的构成:元素 + 指针(指示元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。

链表的存储方式

链式存储是最常用的存储方式之一,它不仅可用来表示线性表,而且可用来表示各种非线性的数据结构。

① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的)

② 链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(link))

结点结构

┌───┬───┐

│data │next │

└───┴───┘

data域--存放结点值的数据域

next域--存放结点的直接后继的地址(位置)的指针域(链域

链表通过每个结点的链域将线性表的n个结点按其逻辑顺序链接在一起的,每个结点只有一个链域的链表称为单链表(Single Linked List)。

头指针head和终端结点

单链表中每个结点的存储地址是存放在其前趋结点next域中,而开始结点无前趋,故应设头指针head指向开始结点链表由头指针唯一确定,单链表可以用头指针的名字来命名。终端结点无后继,故终端结点的指针域为空,即NULL。

单向链表

是一种线性表,以“结点的序列”表示线性表称作线性链表单链表),单链表是链式存取的结构。实际上是由节点(Node)组成的,一个链表拥有不定数量的节点。其数据在内存中存储是不连续的,它存储的数据分散在内存中,每个结点只能也只有它能知道下一个结点的存储位置。由N各节点(Node)组成单向链表,每一个Node记录本Node的数据及下一个Node。向外暴露的只有一个头节点(Head),我们对链表的所有操作,都是直接或者间接地通过其头节点来进行的。 

最左边的节点即为头结点(Head),但是添加节点的顺序是从右向左的,添加的新节点会被作为新节点。最先添加的节点对下一节点的引用可以为空。引用是引用下一个节点而非下一个节点的对象。因为有着不断的引用,所以头节点就可以操作所有节点了。 
下图描述了单向链表存储情况。存储是分散的,每一个节点只要记录下一节点,就把所有数据串了起来,形成了一个单向链表。

这里写图片描述 
节点(Node)是由一个需要储存的对象及对下一个节点的引用组成的。也就是说,节点拥有两个成员:储存的对象、对下一个节点的引用。下面图是具体的说明:

这里写图片描述

 

定义单链表

在Java中,我们可以将单链表定义成一个类,单链表的基本操作即是类的方法,而结点就是一个个实例化的对象,每个对象中都有“元素值”和“下一结点地址”两个属性。在“下一结点地址”属性中存储的是下一个对象的引用,这样,一个个对象连在一起就成为了单链表。

  单链表有以下基本操作:

    1、初始化单链表

    2、销毁单链表

    3、清空单链表

    4、检测单链表是否为空

    5、返回单链表的元素个数

    6、返回单链表中指定位置元素的值

    7、返回单链表中第一个与指定值相同的元素的位置

    8、返回指定元素的直接前驱

    9、返回指定元素的直接后继

    10、向指定位置插入元素

    11、删除指定位置的元素

    12、遍历单链表

  为了方便对单链表进行操作,我们还需要引入一个头结点,头结点中不存储元素值,只存储单链表第一个结点的地址。初始化单链表即创建头结点,而销毁单链表即销毁头结点。

 

循环队列的相关条件和公式: 

队尾指针是rear,队头是front,其中QueueSize为循环队列的最大长度 
1.队空条件:rear==front

rear==front不一定队列为空,也有可能为满,可以采取两种方法判断。一:设立一个标志位flag来区别队列为空还是满。二:少用一个元素空间,约定以“队列头指针在队列尾指针的下一位置上”作为队列为满的标志。
2.队满条件:(rear+1) %QueueSIze==front 
3.计算队列长度:(rear-front+QueueSize)%QueueSize 
4.入队:(rear+1)%QueueSize 
5.出队:(front+1)%QueueSize

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值