数据结构相关知识点及相关练习题(1)

顺序表链表
定义顺序存储的线性表,顺序存储是用一组地址连续的存储单元依次存放线性表中各个数据元素存储结构用一组任意的存储单元存放线性表的元素
特点

(1)便于随机存取

(2)逻辑上相邻的数据元素,在物理存储位置也相邻

(3)每个数据元素在存储器中占用相同大小的空间

(1)存储空间不受限制(不用预先分配一块连续空间)

(2)存储动态分配

(3)便于插入和删除

缺点

(1)不便于插入和删除

(2)存储空间限制(要预先分配一块空间)

(1)空间利用率低
使用范围顺序表实现简单,空间利用率高,可高效的随机存取,适合用于相对“稳定”的静态线性表链表比较灵活,插入和删除的操作效率高,空间利用率低,适合于“动态”的线性表
共同点                    两者都是线性表的基本实现方式

顺序表的插入,删除,查找的时间复杂度O(n)

链表的插入,删除,查找的时间复杂度O(n)

顺序表的基本实现

package thirdTask;

import java.util.Scanner;

public class ShunXuBiao {
	private Object[] listElem;// 线性表存储空间
	private int curLen;// 线性表的当前长度
//顺序表类的构造函数,构造一个存储空间容量为maxSize的线性表

	public ShunXuBiao(int maxSize) {
		curLen = 0;// 置顺序表的当前长度为0
		listElem = new Object[maxSize];// 为顺序表分配maxSize个存储单元
	}

//将一个已经存在的线性表置成空表
	public void clear() {
		curLen = 0;//
	}

//判断线性表中的数据元素的个数是否为0,若为0则返回true,否则返回false
	public boolean isEmpty() {
		return curLen == 0;

	}

//求线性表中的数据元素的个数并返回其值
	public int length() {
		return curLen;
	}

//读取到线性表中的第i个数据元素并由函数返回其值,其中i的取值范围为0<=i<=length()-1,若i值不在次范围则抛出异常
	public Object get(int i) throws Exception {
		if (i < 0 || i > curLen - 1) // i小于0或者大于表长减1
			throw new Exception("第" + i + "个元素不存在");
		return listElem[i]; // 返回顺序表中第i个数据元素
	}

//在线性表的第i个数据元素之前插入一个值为x的数据元素
	public void insert(int i, Object x) throws Exception {
		if (curLen == listElem.length)
			throw new Exception("顺序表已满");
		if (i < 0 || i > curLen)
			throw new Exception("插入位置不合法");
		for (int j = curLen; j > i; j--) {
			listElem[j] = listElem[j - 1];

		}
		listElem[i] = x;
		curLen++;
	}

//删除并返回线性表中第i个数据元素
	public void remove(int i) throws Exception {
		if (i < 0 || i > curLen - 1)
			throw new Exception("删除位置不合法");
		for (int j = i; j < curLen - 1; j++) {

			listElem[j] = listElem[j + 1];
		}
		curLen--;
	}

//返回线性表中首次出现指定的数据元素的位序号,若线性表中不包含此数据元素,则返回-1
	public int indexOf(Object x) {
		int j = 0;
		while (j < curLen & !listElem[j].equals(x))
			j++;
		if (j < curLen)
			return j;
		else
			return -1;
	}

//输出线性表中的数据元素
	public void dispaly() {
		for (int j = 0; j < curLen; j++) {
			System.out.print(listElem[j] + " ");

		}
		System.out.println();
	}

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		int n = 10;
		ShunXuBiao L = new ShunXuBiao(80);
		for (int i = 0; i < n; i++)
			L.insert(i, i);
		System.out.println("请输入i的值");
		int i = new Scanner(System.in).nextInt();
		if (0 < i && i <= n) {
			System.out.println("第" + i + "个元素的直接前驱是" + L.get(i - 1));
		} else {
			System.out.println("第" + i + "个元素的直接前驱不存在");
		}
	}

}

单链表、双链表、循环链表

单链表:节点只有一个指针域的链表

双链表:节点有两个指针域的链表

 循环链表:首尾相接的链表

链式表存储的两种形式

单循环链环特点:

1)从任一结点出发都可访问到表中所有结点

2)用头指针表示的单循环链找开始结点的时 间是O1; 用头指针表示的单循环链终端结点的时间是On

3)用尾指针表示的单循环链找开始结点的时间是O1; 用尾指针表示的单循环链终端结点的时间是O1

1. 以下关于顺序表的叙述中正确的是____B__。

        A.顺序表的优点是存储密度大且插入、删除运算效率高

        B.顺序表的优点是具有随机存取特性

        C.顺序表中所有元素可以连续也可以不连续存放

        D.在含n个元素的顺序表中查找序号为i的元素的时间复杂度为O(n)

2.在含n个元素的顺序表中,算法的时间复杂度是O(1)的是___A___。

        A.访问第i个元素(0≤i≤n-1)和求第i个元素的前驱元素(1≤i≤n-1)

        B.在第i个元素后插入一个新元素(0≤i≤n-1)

        C.删除第i个元素(0≤i≤n-1)

        D.将n个元素从小到大排序

3.将两个各有n个元素的递增有序顺序表归并成一个有序顺序表,其最少的比较次数是___A___。

        A.n

        B.2n-1

        C.2n

        D.n-1

4.线性表是包含n(n≥0)个___C___ 的有限序列。

        A.关系

        B.字符

        C.数据元素

        D.数据项

5.设数据的逻辑结构如下: B1=(D,R) D={1,2,3,4,5,6,7,8,9} R={r} r={<1,2>,<1,3>,<3,4>,<3,5>,<4,6> ,<4,7>,<5,8>,<7,9>} 指出哪些是开始结点,哪些是终端结点,说明是何种数据结构。

      其中1是开始结点,2、6、8、9是终端结点,除开始结点外,每个结点有唯一的前趋结点,除终端结点外,每个结点有一个或多个后继结点,所以它是一种树形结构。

6.设有采用二元组表示的数据逻辑结构为S=(D,R),其中D={a,b,…,i},R={r},r={(a,b),(a,c),(c,d),(c,f),(f,h),(d,e),(f,g),(h,i)},问相对于关系R,哪些结点是开始结点,哪些结点是终端结点?

        该逻辑结构为树形结构,其中a结点没有前趋结点,称为根结点,b、e、g、i结点没有后继结点,它们都是终端结点。

7.在数据结构中,以下说法中不正确的是(D )。

        A.数据元素是数据的基本单位

        B.数据项是不可分割的最小可标识单位

        C.数据可由若干个数据元素构成

        D.数据项可由若干个数据元素构成

8.在含有n(n>2)个数据结点的数据结构中,开始结点是指____A__ 的结点。

        A.没有前趋结点

        B.含有一个或多个前趋结点

        C.没有后继结点

        D.含有一个或多个后继结点

9.在含有n(n>2)个数据结点的数据结构中,终端结点是指___C___ 的结点。

        A.没有前趋结点

        B.含有一个或多个前趋结点

        C.没有后继结点

        D.含有一个或多个后继结点

解析:终端节点是没有任何后继节点

10.数据结构通常采用二元组表示:B=(D,R),其中R表示__C____ 的集合。

        A.数据项

        B.数据元素

        C.数据元素关系

        D.数据类型

  解析:二元组(D,R)是数据逻辑结构的一种通用描述方法,其中D是数据元素的集合,R是数据元素关系的集合,在D上可以多种关系,每个关系用序偶来表示。

11.数据结构通常采用二元组表示:B=(D,R),其中D表示___B___ 的集合。

        A.数据项

        B.数据元素

        C.数据元素关系

        D.数据类型

12.数据结构通常采用二元组表示:B=(D,R),其中R用于表示数据元素关序的集合,每个关系又是__A____ 的集合。

        A.序偶

        B.序列

        C.数据结构

        D.数据类型

   解析:二元组(D,R)是数据逻辑结构的一种通用描述方法,其中D是数据元素的集合,R是数据元素关系的集合,在D上可以多种关系,每个关系用序偶来表示。

13.在数据结构中,与所使用的计算机无关的是数据的(A)结构。

        A.逻辑

        B.存储

        C.逻辑和存储

        D.物理

14.计算机所处理的数据一般具备某种内在联系,这是指(B) 。

        A.数据和数据之间存在某种关系

        B.元素和元素之间存在某种关系

        C.元素内部具有某种结构

        D.数据项和数据项之间存在某种关系

15.数据结构是指数据元素的集合以及它们之间的(B) 。

        A.结构

        B.关系

        C.运算

        D.算法

   解析:数据结构中讨论的数据是由数据元素构成的,这些数据元素之间存在某种关系,数据结构课程中主要讨论相邻关系。

15.空的线性表就是所有元素尚未赋值的线性表。(×)  解析:空的线性表就是长度为0的线性表。

16.在一个含有n(n≥1)个元素的线性表中,所有元素值不能相同。(×)解析:在线性表中允许存在元素值相同的元素,但它们的位置是不同。

17.线性表中每个元素都有一个前趋元素和一个后继元素。(×)解析:开始元素没有前趋元素,终端元素没有后继元素。

18.线性表的长度是线性表占用的存储空间的大小。(×)解析:线性表的长度是指表中元素个数,属逻辑结构的概念,与线性表占用的存储空间大小无关。

19.线性表的存储结构大小与线性表中元素类型有关。(√)解析:线性表的存储结构大小等于线性表中所有元素存储空间之和,而线性表中元素类型不同,每个元素所占用的存储空间大小也可能不同。

20.线性表中的结点按前趋、后继关系可以排成一个线性序列。(√)解析:线性表是有限个相同性质的元素的序列。

21.线性表是具有n个(C)的有限序列。

        A.表元素

        B.字符

        C.数据元素

        D.数据项

22.线性表是(A) 。

        A.一个有限序列,可以为空

        B.一个有限序列,不可以为空

        C.一个无限序列,可以为空

        D.一个无限序列,不可以为空

解析:线性表的定义有三点,即所有元素类型相同、元素个数有限、元素之间为线性关系(序列是指线性关系),另外线性表中元素个数可以为0,即空表。

23.线性表有一个特点(B) 。

        A.至少有两个元素,即开始元素和终端元素

        B.若没有开始元素,则一定没有终端元素

        C.每个元素必须有一个前趋元素

        D.任何一个元素都还可能既是开始元素又是终端元素

24.关于线性表的正确说法是(D) 。

        A.每个元素都有一个前趋和一个后继元素

        B.线性表中至少有一个元素

        C.表中元素的排序顺序必须是由小到大或由大到小

        D.除第一个元素和最后一个元素外,其余每个元素有且仅有一个前趋和一个后继元素

25.有一个非空循环双链表,在结点p之后插入结点q的操作是q.next=p.next; p.next=q; q.prior=p; __D____。

        A.p.next=q;

        B.q.prior.next=q;

        C.q.next.prior=q;

        D.q.next.next=q; 

 26.在长度为n的____D__ 上,删除尾结点的时间复杂度为O(1)。

        A.单链表

        B.双链表

        C.循环单链表

        D.循环双链表

27.线性表的链式存储结构与顺序存储结构相比,优点是___C___。

        A.所有的操作算法实现简单

        B.便于随机存取

        C.便于插入和删除元素

        D.节省存储空间

28.线性表采用链表存储时,存放所有存放元素的结点地址__D____。

        A.必须是连续的

        B.一定是不连续的

        C.部分地址必须是连续的

        D.连续与否均可以

29.单链表的存储密度___C___。

        A.大于1

        B.等于1

        C.小于1

        D.不能确定

30.对于单链表存储结构,以下说法中错误的是__C____。

        A.一个结点的数据成员用于存放线性表的一个数据元素

        B.一个结点的指针成员用于指向下一个数据元素的结点

        C.单链表必须带有头结点

        D.单链表中所有结点可以连续也可以不连续存放

31.链表不具备的特点是___A___。

        A.可随机访问任一结点

        B.插入删除不需要移动结点

        C.不必事先估计存储空间

        D.所需空间与其长度成正比

32.以下关于链表的叙述中,不正确的是__C____。

        A.结点中除元素值外还包括指针成员,因此存储密度小于顺序存储结构

        B.逻辑上相邻的元素物理上不必相邻

        C.可以根据头结点地址直接计算出第i个结点的地址

        D.插入、删除运算操作方便,不必移动结点

33.若某线性表最常用的操作是查找序号i的元素和在末尾插入元素,则选择__A____存储结构最节省时间。

        A.顺序表

        B.带头结点的循环双链表

        C.单链表

        D.带尾结点的循环单链表

34.将两个各有n个元素的递增有序顺序表归并成一个有序顺序表,其最少的比较次数是___A___。

        A.n

        B.2n-1

        C.2n

        D.n-1

35.以下关于单链表的叙述中正确的是___C___。 Ⅰ.结点中除元素值外还包括指针成员,存储密度小于顺序表 Ⅱ.找第i个结点的时间为O(1) Ⅲ.在插入和删除操作时不必移动结点

        A.仅Ⅰ、Ⅱ

        B.仅Ⅱ、Ⅲ

        C.仅Ⅰ、Ⅲ

        D.Ⅰ、Ⅱ、Ⅲ

36.有一个长度为n(n>1)的带头结点的单链表h,另设有尾指针r(指向尾结点),执行___B___ 操作与链表的长度有关。

        A.删除单链表中的首结点

        B.删除单链表中的尾结点

        C.在单链表首结点前插入一个新结点

        D.在单链表尾结点素后插入一个新结点

37.已知一个长度为n的单链表是递增有序的,所有结点值不相同,以下叙述中正确的是__C____。

        A.插入一个结点使之有序的算法的时间复杂度为O(1)

        B.删除最大值结点使之有序的算法的时间复杂度为O(1)

        C.找最小值结点的算法的时间复杂度为O(1)

        D.以上都不对

38.已知两个长度分别为m 和n 的递增单链表,若将它们合并为一个长度为m+n 的递减单链表,则最好情况下的时间复杂度是___D___。

        A.O(n)

        B.O(m)

        C.O(m×n)

        D.O(m+n)

39.在一个双链表中,删除p结点(非尾结点)的操作是___A___。

        A.p.prior.next=p.next; p.next.prior=p.prior;

        B.p.prior=p.prior.prior; p.prior.prior=p;

        C.p.next.prior=p; p.next=p.next.next;

        D.p.next=p.prior.prior; p.prior=p.prior.prior; 

 40.在长度为n(n≥1)的双链表L中,在p结点之前插入一个新结点s的时间复杂度为___A___。

        A.O(1)

        B.O(n)

        C.O(n2)

        D.O(nlog2n)

41.在长度为n(n≥1)的双链表中插入一个结点p(非尾结点)要修改___D___个指针成员。

        A.1

        B.2

        C.3

        D.4

42.在长度为n(n≥1)的双链表中删除一个结点p(非尾结点)要修改___B___个指针成员。

        A.1

        B.2

        C.3

        D.4

43.设固定容量的循环队列中数组的下标是0~N-1,其队头队尾指针分别为f和r(f指向队首元素的前一位置,r指向队尾元素),则其元素个数为___D___。

        A.r-f

        B.r-f-1

        C.(r-f)%N+1

        D.(r-f+N)%N

44.设固定容量的循环队列的存储空间为a[0..20],且当前队头指针和队尾指针的值分别为8和3,则该队列中元素个数为___C___。

        A.5

        B.6

        C.16

        D.17

45.假设用一个不带头结点的单链表表示队列,队尾在链表的___B___ 位置。

        A.链头

        B.链尾

        C.链中

        D.以上都可以

46.最不适合用做链队的链表是__A____。

        A.只带头结点指针的非循环双链表

        B.只带队首结点指针的循环双链表

        C.只带队尾结点指针的循环双链表

        D.以上都不适合

47.若元素a、b、c、d、e、f依次进栈,允许进栈、退栈的操作交替进行,但不允许连续3次出栈工作,则不可能得到的出栈序列是____D__。

        A.dcebfa

        B.cbdaef

        C.bcaefd

        D.afedcb

48.一个栈的进栈序列是a、b、c、d、e,则栈的不可能的输出序列是__C____。

        A.edcba

        B.decba

        C.dceab

        D.abcde

49.已知一个栈的进栈序列是1,2,3,…,n,其输出序列的第一个元素是i(1≤i≤n),则第j(1≤j≤n)个出栈元素是__D____。

        A.i

        B.n-i

        C.j-i+1

        D.不确定

50.已知一个栈的进栈序列是1,2,3,…,n,其输出序列是p1,p2,…,pn,若p1=n,则pi的值___C___。

        A.i

        B.n-i

        C.n-i+1

        D.不确定

51.设有5个元素进栈序列是a、b、c、d、e,其输出序列是c、e、d、b、a,则该栈的容量至少是___D___。

        A.1

        B.2

        C.3

        D.4

52.设n个元素进栈序列是1、2、3、…、n,其输出序列是p1、p2、…、pn,若p1=3,则p2的值为___C___。

        A.一定是2

        B.一定是1

        C.不可能是1

        D.以上都不对

53.由两个栈共享一个数组空间的好处是___B___。

        A.减少存取时间,降低上溢出发生的机率

        B.节省存储空间,降低上溢出发生的机率

        C.减少存取时间,降低下溢出发生的机率

        D.节省存储空间,降低下溢出发生的机率

54.算术表达式(a+a*b)*a+c*b/a的后缀表达式是__A____。

        A.a a b * + a * c b * a / +

        B.a a * b + a * c b * a / +

        C.a a b * a * c b * + a / +

        D.a a b * + a c b * a / + *

55.将算术表达式“1+6/(8-5)*3”转换成后缀表达式,在求后缀表达式的过程中,当遇到'*'时,运算数栈(从栈顶到栈底次序)为____C__。

        A.8 6 1

        B.5 8 1

        C.3 2 1

        D.3 6 1

56.当用一个数组data[0..n-1]存放栈中元素时,栈底最好____C__。

        A.设置在data[0]处

        B.设置在data[n-1]处

        C.设置在data[0]或data[n-1]处

        D.设置在data数组的任何位置

57.若一个栈元素用数组data[1..n]存储,初始栈顶指针top为n,则以下元素x进栈最适合的操作是___D___。

        A.top++; data[top]=x;

        B.data[top]=x; top++;

        C.top--; data[top]=x;

        D.data[top]=x; top--;

58.若一个栈元素用数组data[1..n]存储,初始栈顶指针top为n,则以下出栈元素x最适合的操作是___B___。

        A.x=data[top]; top++;

        B.top++; x=data[top];

        C.x=data[top]=x; top--;

        D.top--; x=data[top];

59.若一个栈元素用数组data[1..n]存储,初始栈顶指针top为0,则以下元素x进栈最适合的操作是__A____。

        A.top++; data[top]=x;

        B.data[top]=x; top++;

        C.top--; data[top]=x;

        D.data[top]=x; top--;

60.若一个栈元素用数组data[1..n]存储,初始栈顶指针top为0,则以下出栈元素x最适合的操作是___A___。

        A.x=data[top]; top--;

        B.x=data[top]; top++;

        C.top--; x=data[top];

        D.top++; x=data[top];

61.有关链栈的叙述中正确的是___A___。

        A.链栈在进栈操作时一般不需要考虑上溢出

        B.链栈在出栈操作时一般不需要考虑下溢出

        C.链栈和顺序栈相比的缺点是不能随机访问栈中元素

        D.以上都不对

62.以下各链表均不带有头结点,其中最不适合用作链栈的链表是___D___。

        A.只有表头指针没有表尾指针的循环双链表

        B.只有表尾指针没有表头指针的循环双链表

        C.只有表尾指针没有表头指针的循环单链表

        D.只有表头指针没有表尾指针的循环单链表

63.栈和队列的共同点是___C___。

        A.都是先进后出

        B.都是后进先出

        C.只允许在端点处插入和删除元素

        D.没有共同点

64.栈和队列的不同点是___C___。

        A.都是线性表

        B.都不是线性表

        C.栈只能在同一端进行插入删除操作,而队列在不同端进行插入删除操作

        D.没有不同点

65.循环队列___C___。

        A.不会产生下溢出

        B.不会产生上溢出

        C.不会产生假溢出

        D.以上都不对

66.某循环队列的元素类型为char,队头指针front指向队头元素的前一个位置,队尾指针rear指向队尾元素,如图1.6所示,则队中从队头到队尾的元素为___C___。

        A.abcd123456

        B.abcd123456c

        C.dfgbca

        D.cdfgbca

67.若某循环队列有队首指针front和队尾指针rear,在队不空时出队操作仅会改变__A____。

        A.front

        B.rear

        C.front和rear

        D.以上都不队

68.若某循环队列有队头指针front和队尾指针rear,在队不满时进队操作仅会改变__B____。

        A.front

        B.rear

        C.front和rear

        D.以上都不对

69.已知循环队列存储在一维数组A[0..n-1]中,且队列非空时front和rear分别指向队头元素和队尾元素。若初始时队列空,且要求第一个进入队列的元素存储在A[0]处,则初始时front和rear的值分别是___B___。

        A.0,0

        B.0,n-1

        C.n-1,0

        D.n-1,n-1

70.设循环队列qu中数组data的下标是0~N-1,其队头、队尾指针分别为f和r(f指向队首元素的前一位置,r指向队尾元素),元素x出队的操作是___D___ ; x=qu.data[qu.f]。

        A.qu.r++

        B.qu.r=(qu.r+1)%N

        C.qu.f++;

        D.qu.f=(qu.f+1)%N

71.二维数组为a[6][10],每个数组元素占用4个存储单元,若按行优先顺序存放的数组元素,a[0][0]的存储地址为860,则a[3][5]的存储地址是_1000_____。

71.二维数组为a[6][10],每个数组元素占用4个存储单元,若按行优先顺序存放的数组元素a[3][5]的存储地址为1000,则a[0][0]的存储地址是___B___。

        A.872

        B.860

        C.868

        D.864

72.一个n阶对称矩阵A采用压缩存储方式,将其下三角+主对角部分元素按行优先存储到一维数组B中,则B中元素个数是___C___

        A.n

        B.n2

        C.n(n+1)/2

        D.n(n+1)/2+1

73.一个n阶对称矩阵A[1..n,1..n]采用压缩存储方式,将其下三角+主对角部分元素按行优先存储到一维数组B[1..m]中,则A[i][j](i≥j)元素在B中的位置k是__C____。

        A.j(j-1)/2+i

        B.j(j-1)/2+i-1

        C.i(i-1)/2+j

        D.i(i-1)/2+j-1

73.一个n阶对称矩阵A[1..10,1..10]采用压缩存储方式,将其下三角+主对角部分元素按行优先存储到一维数组B[0..m]中,则A[8][5]元素在B中的位置k是__A____

        A.32

        B.37

        C.45

        D.60

74.一个n阶对称矩阵A[1..10,1..10]采用压缩存储方式,将其上三角+主对角部分元素按行优先存储到一维数组B[0..m]中,则A[5][8]元素在B中的位置k是___B___。

        A.10

        B.37

        C.45

        D.60

75.一个n阶(n>1)三对角矩阵A按行优先顺序压缩存放在一维数组B中,则B中的元素个数是___D___。

        A.3n

        B.n2

        C.2n

        D.3n-2

76.对稀疏矩阵进行压缩存储的目的是___C__。

        A.便于进行矩阵运算

        B.便于输入和输出

        C.节省存储空间

        D.降低运算的时间复杂度

77.一个稀疏矩阵采用压缩后,和直接采用二维数组存储相比会失去____B__ 特性

        A.顺序存储

        B.随机存取

        C.输入输出

        D.以上都不对

78.m行n列的稀疏矩阵采用十字链表表示时,其中循环单链表的个数为____C__。

        A.m+1

        B.n+1

        C.m+n+1

        D.MAX{m,n}+1

79.数组是同类型元素的集合。(×)

        解析:数组是由同类型元素构成,但不同于集合,每个元素都有自已的位置,其中可能存在相同的元素。

80.数组可看成线性表的一种推广,因此与线性表一样,其基本运算有插入和删除等。(×)

        解析:数组可看成线性表的一种推广,但插入和删除不是其基本运算。

81.数组只能采用顺序存储结构。(×)

        解析:数组是一种逻辑结构,主要的基本运算是存、取元素,所以最适合采用顺序存储结构,但并不能说数组只能采用顺序存储结构。

82.二维数组中每一行的元素个数都是相等的。(√)

83.  二维数组的顺序存储方式只能以行优先存储。(×)

        解析:二维数组的顺序存储方式分为以行优先和以列优先存储两种方式。

84.二维数组A[-3..5,0..10]中共有80个元素。(×)

        解析:其元素个数=[5-(-3)+1]×[10-0+1]=99。

85.定义二维数组A[1..8,0..10],起始地址为LOC,每个元素占2个存储单元,在以行序为主序的存储方式下,某数据元素的地址为LOC+50,则在以列序为主序的存储方式下,该元素的存储地址为LOC+36。(×)

        解析:这里m=8,n=11,k=2。在以行序为主序时,设该元素为ai,j,有LOC(ai,j)=LOC+[(i-1)×n+j] ×k=LOC+50,即11i+j=36,由于1≤i≤8,0≤j≤10,由此推出i=3,j=3。 在以列序为主序时,LOC(ai,j)=LOC+[j×m+i-1]×k,所以LOC(a3,3)=LOC+52。

86.特殊矩阵是指用途特殊的矩阵。(×)

        解析:特殊矩阵是指元素值分布具有某种规律的矩阵。

87.用一维数组存储特殊矩阵,可以简化对矩阵的存取操作。(×)

        解析:主要用于数据压缩。

88.以下属于数组的基本运算的是( C)。

        A.插入元素

        B.删除元素

        C.读指定位置的元素

        D.以上都不是

        解析:数组的基本运算只有元素的存和取,前者是更新指定元素的值,后者是读指定元素的值,每个元素由其下标确定位置。

89.有一个三维数组A[-2..2][-4..5][2..6],其中元素个数是(B )。

        A.60

        B.250

        C.144

        D.396

解析:该数组的元素个数=[2-(-2)+1]×[5-(-4)+1]×[6-2+1]=5×10×5=250。

90.一个二维数组A中,每个元素的长度为3个字节,行下标从0到9,列下标从0到11,则连续存放该数组至少需要__C____ 个字节

        A.100

        B.240

        C.360

        D.340

        解析:该数组的元素个数=(9-0+1)×[11-0+1]=120,每个元素的长度为3个字节,总种占用3×120=360个字节。

91.设二维数组a[m][n],每个数组元素占用k个存储单元,第一个数组元素的存储地址是LOC(a[0][0]),求按列优先顺序存放的数组元素a[i][j](0≤i≤m-1,0≤j≤n-1)的存储地址为(C )。

        A.LOC(a[0][0])+[(i-1)×n+j-1]×k

        B.LOC(a[0][0])+[i×n+j]×k

        C.LOC(a[0][0])+[j×m+i]×k

        D.LOC(a[0][0])+[(j-1)×m+i-1]×k

解析:数组a为m行n列,行号从0到m-1,列号从0到n-1。

92.设二维数组a[1..5][1..8],若按行优先的顺序存放数组的元素,则a[4][6]元素的前面有(C )个元素。

        A.6

        B.28

        C.29

        D.40

        解析:该数组的行、列号从1开始,当按行优先的顺序存储时,a[4][6]元素的前有1~3行,每行8-1+1=8个元素,小计24个元素,在第6行中,a[4][6]元素的前有a[4][1..5]共5个元素,所以a[4][6]元素的前面有24+5=29个元素。

93.设二维数组a[1..5][1..8],若按列优先的顺序存放数组的元素,则a[4][6]元素的前面有( B)个元素。

        A.6

        B.28

        C.29

        D.40

        解析:该数组的行、列号从1开始,当按列优先的顺序存储时,a[4][6]元素的前有1~5列,每列5-1+1=5个元素,小计25个元素,在第6列中,a[4][6]元素的前有a[1..3][6]共3个元素,所以a[4][6]元素的前面有25+3=28个元素。

94.在二维数组中,每个数组元素同时处于( C)个向量中。

        A.0

        B.1

        C.2

        D.n

        解析:在二维数组中,每个数组元素同时处于两个向量,即行向量和列向量中。这里的向量就是一维数组对应的线性表。

题目会随时更新,如有错误,欢迎积极指导

数据结构的相关练习(2)附加答案

数据结构的相关练习(3)附加答案

数据结构(图)的相关练习(4)附加答案

数据结构(排序)的相关练习(5)附加答案

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值