寒假作业Day 13

本文讲述了关于栈和队列的选择题解题思路,涉及栈的元素进出操作、循环队列的尾指针计算以及编程题中字符数组处理和二叉树颜色分配的递归算法。
摘要由CSDN通过智能技术生成

寒假作业Day 13

一、选择题

在这里插入图片描述

答案选C,3个,很简单
a,b入栈,b出栈;c,d入栈,再出栈;e,f同理;a再出栈,g入栈再出栈
所以进栈最多的时候是3个元素

在这里插入图片描述

已知一个栈的入栈序列是连续的整数1到n,且已知第二个出栈的元素是3。这意味着在3出栈之前,2必须已经入栈但还未出栈。因此,在3出栈后,紧接着1和2也必须依次出栈,以满足题目条件。在此之后,栈为空,剩下的元素4到n可以按任意顺序入栈和出栈。所以,第三个出栈的元素p 3 可以是4到n中的任意一个,共有n−3种可能。

3、已知栈 S 的初始状态为空,元素 a,b,c,d,e,f 依次入栈 S ,出栈的序列为 b,d,c,f,e,a 则栈S的容量至少为( )
A. 6 B. 5 C. 4 D. 3

首先a和b入栈,b出栈;c和d入栈,并出栈;e和f入栈,并出栈;a出栈;由此可知,S的容量在c和d入栈或者e和f入栈的时候最大,所以栈的容量至少为3

4、假设以数组A[60]存放循环队列的元素,其头指针是front=47,当前队列有50个元素,则队列的尾指针值为( )
A.3 B.37 C.97 D.50

在循环队列中,头指针 front 和尾指针 rear 是用来指示队列中元素的起始位置和结束位置的。循环队列的特性是当指针到达数组的末尾时,它会回到数组的开头。

已知数组 A[60],头指针 front = 47,当前队列有 50 个元素。
首先,我们需要计算队列中从 front 到数组末尾的空闲空间。由于数组大小为 60,从头指针 front = 47 到数组末尾的空闲空间是 60 - 47 = 13。

然后,由于队列中有 50 个元素,而末尾的空闲空间只有 13,这意味着尾指针 rear 必须从数组的开头开始,并向后移动 50 - 13 = 37 个位置。
因此,尾指针 rear 的位置是 37。

5、若用一个大小为 6 的数组来实现循环队列,且当 rear 和 front 的值分别为 0 和 3 。当从队列中删除一个元素,再加入两个元素后,rear 和 front 的值分别为( )
A.1和5 B.2和4 C.4和2 D.5和1

删除1个元素,front从3移动到4;加入两个元素,rear从0移动到2;故答案为2和4

二、编程题

在这里插入图片描述

char* makeGood(char* s) {
    int i = 0, j;
    for (j = 1; j < strlen(s); j++) {
        if (i == -1 || s[i] + 32 != s[j] && s[i] - 32 != s[j]) {
            s[++i] = s[j];
        }

        else {
            i--;
        }
    }
    s[++i] = '\0';
    return s;
}

我们拿abBAcC来举个例子,一开始i=0,j=1,ab满足条件,所以i=1,j=1,s[1]=s[1];i=1,j=2,bB是不满足的,i–为0;i=0,j=3,aA不满足,所以i–为-1;i=-1,j=4,满足条件,s[0]=s[4],即a变为c;i=0,j=5,cC不满足,i–为-1,j走到尽头;所以s[0]变为\0结束符,即把s变成了空数组
原理大家可以自己分析一下

在这里插入图片描述

//递归给每个节点的color赋值,但也跟节点本身的值有关
 void col(struct TreeNode* node,bool* color){
    color[node->val]=true;
    if(node->left)
        col(node->left,color);
    if(node->right)
        col(node->right,color);
 }

//主要用来算返回值的函数
int numColor(struct TreeNode* root){
    bool* color=(bool*)calloc(1,sizeof(bool)*1001);//将所有元素初始化为0(false)
    int ans=0;
    col(root,color);//color数组赋值
    for(int i=0;i<1001;i++){
        if(color[i])
            ++ans;//如果这个是true,那么就让计数器+1,并且就算一个i出现好多次,也只会定义一次true
    }
    return ans;
}

这两个函数的意思是:col函数首先利用递归,遍历二叉树,给color数组的空间赋值,这是用在算返回值的函数中的;在下面的函数中,我们首先创建一个color函数,并将其值全部初始化为false;
创建计数器,用col函数赋值,然后在for循环中,如果之前给这个color[i]赋过值,那么计数器就增加,最后return 计数器中的值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值