记录一下自己牛客网刷题的错题

1.广义表即我们通常所说的列表(lists)。它放松了对表元素的原子性限制,允许他们有自身结构。那么广义表E((a,(a,b),((a,b),c)))的长度和深度分别为:
正确答案:1和4
解析:广义表长度=属于最外层括号的逗号数加一。本题逗号为0 所以长度为1广义表深度=删除几层括号后可成为一个序列。

2.稀疏矩阵一般的压缩存储方法有两种,即()
正确答案:三元组和十字链表
解析:三元组顺序表又称有序的双下标法,对矩阵中的每个非零元素用三个域分别表示其所在的行号、列号和元素值。它的特点是,非零元在表中按行序有序存储,因此便于进行依行顺序处理的矩阵运算。当矩阵中的非0元素少于1/3时即可节省存储空间。 链表:是既带行指针又带列指针的链接存储方式,每个三元组结点处于所在行单链表与列单链表的交点处,当矩阵的非零元个数和位置在操作过程中变化较大时,用这种存储结构更为恰当。
在十字链表中,每个非零元可用一个含五个域的结点表示,其中 i, j 和e 三个域分别表示该非零元所在的行、列和非零元的值,向右域 right
用以链接同一行中下一个非零元,向下域down 用以链接同一列中下一个非零元。同一行的非零元通过 right
域链接成一个线性链表,同一列的非零元通过 down 域链接成一个线性链表,每个非零元既是某个行链表中的一个结点,又是某个列链表中的一个结点,整个矩阵构成了一个十字交叉的链表,故称这样的存储结构为十字链表,可用两个分别存储行链表的头指针和列链表的头指针的一维数组表示之。

3.循环队列A[0…m-1]存放其中元素值,用front和rear分别表示队头和队尾,则当前队列中的元素数是()
正确答案:(rear-front+m+1)%m
解析:队列一般有两种形式,一种是队首前一位或者队尾后一位不存储元素,仅用来方便判断队列是空还是满。另一种是队首队尾指向的位置存储元素,充分利用空间。
对于第一种情况:元素个数为(rear-front+maxSize)%maxSize
对于第二种情况:元素个数为(rear-front+1+maxSize)%maxSize
以上,综合得知此题是第二种情况。

4.一个非空广义表的表头()
正确答案:可以是原子,也可以是子表
解析:表头可以是原子或子表,表尾一定是子表

5.线性表的长度是线性表所占用的存储空间的大小。
正确答案:F
解析:线性表长度的定义是它所包含的元素的个数。元素的类型决定了元素所占用存储空间的大小,但元素的个数不等价于元素的类型。此本题答案为F。

6.下列叙述中正确的是?
正确答案:循环队列中元素的个数是有队头指针和队尾指针共同决定
解析:循环队列元素个数:n=(rear-front+MAXSIZE)mod MAXSIZE 其中rear表示队尾,front表示队首,MAXSIZE表示队列长度

7.设有n个元素的集合,采用带头结点有序链表来实现,设集合的元素占8个字节,链接指针占2个字节,该集合的存储密度为
正确答案:0.8n/(n+1)
解析:元素占8n字节,指针占2n字节,头结点不存元素,一共10字节 故,8n/(8n+2n+10)=0.8n/(n+1)

8.将长度为n的单链表链接在长度为m的单链表之后的算法的时间复杂度是多少?
正确答案:O(m)
解析:找到前一个链表的尾节点,直接吧后面的节点全都链接上去,因此找尾节点为O(m)

9.文件分配表FAT是管理磁盘空间的一种数据结构,用在以链接方式存储文件的系统中记录磁盘分配和跟踪空白磁盘块。整个磁盘仅设一张FAT表,其结构如下图所示。如果文件块号为2,查找FAT序号为2的内容得知物理块2的后继物理块是5;再查FAT序号为5的内容得知物理块5的后继物理块是7;接着继续查FAT序号为7的内容为“^”,即该文件结束标志,所以该文件由物理块2、5、7组成。
在这里插入图片描述
假设磁盘物理块大小为1KB,并且FAT序号以4bits为单位向上扩充空间。请计算下列两块磁盘的FAT最少需要占用多大的存储空间?

1)一块540MB的硬盘

2)一块1.2GB的硬盘

正确答案:1.35M 3.6M
解析:由题设条件可知,硬盘大小为540MB且磁盘物理块大小为1KB时,该硬盘共有盘块540MB/1KB = 540K个。
又因为219<540K<220,所以540K个盘块号需要用20位二进制数表示,也即文件分配表FAT的每个表项为20/8=2.5B。所以,540MB磁盘的FAT需占用存储空间容量为:
2.5B×540K=1350KB
(2)当硬盘容量大小为1.2GB时,硬盘共有盘块1.2M个。
又因为220<1.2M<221,所以1.2M个盘块号需要用21位二进制数表示,为了方便FAT的存取,则每个表项用24位(3B)二进制数表示。所以,1.2GB磁盘的FAT需占用存储空间容量为:3B×1.2M=3.6MB

10.用不带头结点的单链表存储队列,其头指针指向队头结点,尾指针指向队尾结点,则在进行出队操作时。
正确答案:队头、队尾指针都可能要修改
解析:因为当队列中只有一个元素时,删除此元素后要将队列置空,此时要修改队尾指针,使尾指针与头指针相等(即Q.rear = Q.front,见严蔚敏数据结构教材P62删除队头元素操作的实现)

11.某带链的队列初始状态为front=rear=NULL。经过一系列正常的入队与退队操作后,front=rear=10。该队列中的元素个数为()
正确答案:1
解析:在这里插入图片描述
12.利用二叉链表存储树,则根结点的右指针是()
正确答案:空
解析:二叉链表: 左孩子右兄弟 ,根节点没有兄弟,所以为空

13.设顺序表的长度为n。下列算法中,最坏情况下比较次数小于
n是=()
正确答案:寻找最大项
解析:A:寻找最大项,最坏查找n-1次
B:快速排序最好情况是每次划分很均匀,则只需递归log2n次,最坏情况是正序或者逆序排列,每次只排除掉1个元素,如果画出来就是一颗斜树,要做n次比较n(n-1)/2次
D:顺序查找可能会查询n次还没有找到

14.以下关于链表和数组说法正确的是()
正确答案:数组从栈中分配空间,链表从堆中分配空间
解析:数组静态分配内存,链表动态分配内存;
数组在内存中连续,链表不连续;
数组元素在栈区,链表元素在堆区;
数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n);
数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)。

15.在链队列中,即使不设置尾指针也能进行入队操作()
正确答案:T
解析:遍历整个队列,当一个元素的next为null时,则此元素为最后一个,在其后面添加新的元素即可。

16

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现错题记录功能,可以使用文件操作来存储和读取错题信息。以下是一个简单的 C 语言代码示例: ```c #include <stdio.h> #include <stdlib.h> #define MAX_SIZE 100 // 最大错题数 // 定义结构体存储错题信息 typedef struct { int question_num; // 题号 char question[100]; // 题目 char answer[100]; // 答案 char explanation[200]; // 解释 } Question; // 存储错题信息到文件 void save(Question* questions, int size, char* file_name) { FILE* fp; fp = fopen(file_name, "w"); if(fp == NULL) { printf("无法打开文件\n"); exit(1); } for(int i = 0; i < size; i++) { fprintf(fp, "%d %s %s %s\n", questions[i].question_num, questions[i].question, questions[i].answer, questions[i].explanation); } fclose(fp); } // 从文件中读取错题信息 void load(Question* questions, int* size, char* file_name) { FILE* fp; fp = fopen(file_name, "r"); if(fp == NULL) { printf("无法打开文件\n"); exit(1); } int i = 0; while(fscanf(fp, "%d %[^\n] %[^\n] %[^\n]\n", &questions[i].question_num, questions[i].question, questions[i].answer, questions[i].explanation) != EOF) { i++; } *size = i; fclose(fp); } int main() { Question questions[MAX_SIZE]; int size = 0; // 读取文件中的错题信息 load(questions, &size, "questions.txt"); // 在此处添加代码,实现错题记录功能 // 存储错题信息到文件 save(questions, size, "questions.txt"); return 0; } ``` 在上述代码中,我们定义了一个 `Question` 结构体来存储每一道错题的信息。`save` 函数将错题信息存储到文件中,`load` 函数从文件中读取错题信息。你可以在 `main` 函数中添加代码来实现错题记录功能,比如让用户输入题目和答案,将输入的信息存储到结构体数组中。最后,调用 `save` 函数将更新后的错题信息存储到文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值