📜  数据结构和算法 |设置 3

📅  最后修改于: 2021-09-27 22:46:30             🧑  作者: Mango

GATE CS 考试中提出了以下问题。

1. 假设你有一个数组 s[1…n] 和一个过程 reverse (s,i,j),它颠倒了位置 i 和 j(两者都包括)之间 a 中元素的顺序。下面的顺序是什么

do, where 1 < k <= n:
  reverse (s, 1, k);
  reverse (s, k + 1, n);
  reverse (s, 1, n);

(GATE CS 2000)
(a) 将 s 向左旋转 k 个位置
(b) 使 s 保持不变
(c) 反转 s 的所有元素
(d) 以上都不是

答案:(一)
对任何 k 的上述 3 次反转的效果等效于将大小为 n 的数组向左旋转 k。详情请看这个帖子。
如果我们将数组旋转 n 次,k = 1 到 n,我们会得到相同的数组。

2. 检查算术表达式是否有平衡括号的最佳数据结构是 a (GATE CS 2004)
a) 排队
b) 堆栈
c) 树
d) 清单

答案(二)
有三种类型的括号 [] { } ()。下面是一个仲裁 c 代码段,它具有所有三种类型的括号。

void func(int c, int a[])
{
   return  ((c +2)  + arr[(c-2)]) ; 
}

Stack 是检查左右括号是否平衡的直接选择。这是一个执行相同操作的算法。

/*Return 1 if expression has balanced parentheses */
bool areParenthesesBalanced(expression )
{ 
   for each character in expression
   {
      if(character == ’(’ || character == ’{’ || character == ’[’) 
        push(stack, character);
      if(character == ’)’ || character == ’}’ || character == ’]’) 
      {
         if(isEmpty(stack))  
           return 0; /*We are seeing a right parenthesis  
                       without a left pair*/
  
         /* Pop the top element from stack, if it is not a pair
             bracket of character then there is a mismatch. 
             This will happen for expressions like {(}) */
         else if (! isMatchingPair(pop(stack), character) ) 
           return 0;   
      }
   }
    
   if(isEmpty(stack))
     return 1; /*balanced*/
   else  
     return 0;  /*not balanced*/   
} /* End of function to check parentheses */
  
/* Returns 1 if character1 and character2 are matching left
   and right parentheses */
bool isMatchingPair(character1, character2)
{
   if(character1 == ‘(‘ && character2 == ‘)’)
     return 1;
   else If(character1 == ‘{‘ && character2 == ‘}’)
     return 1;
   else If(character1 == ‘[‘ && character2 == ‘]’)
     return 1;
   else 
     return 0;
}


3. 有根树的层序遍历可以通过从根开始执行 (GATE CS 2004)

a) 前序遍历
b) 有序遍历
c) 深度优先搜索
d) 广度优先搜索

答案(d)
详情请看这个帖子


4. 给定以下输入 (4322, 1334, 1471, 9679, 1989, 6171, 6173, 4199) 和哈希函数x mod 10,以下哪些陈述是正确的?
一世。 9679, 1989, 4199 散列到相同的值
ii. 1471, 6171 有相同的值
三、所有元素散列到相同的值
四、每个元素散列到不同的值
(GATE CS 2004)

a) 我只
b) 仅 ii
c) 仅 i 和 ii
d) iii 或 iv

答案 (c)

5. 给定二叉搜索树的后序遍历,T 产生以下键序列
10, 9, 23, 22, 27, 25, 15, 50, 95, 60, 40, 29
以下哪一个键序列可以是树 T 的有序遍历的结果? (GATE CS 2005)

a) 9, 10, 15, 22, 23, 25, 27, 29, 40, 50, 60, 95
b) 9, 10, 15, 22, 40, 50, 60, 95, 23, 25, 27, 29
c) 29, 15, 9, 10, 25, 22, 23, 27, 40, 60, 50, 95
d) 95, 50, 60, 40, 27, 23, 22, 25, 10, 9, 15, 29

答案(一)
BST 的中序遍历总是以递增的顺序给出元素。在所有四个选项中,a) 是唯一的递增顺序。