📜  数据结构和算法 | 24套

📅  最后修改于: 2021-09-27 15:08:14             🧑  作者: Mango

以下问题已在 GATE CS 2010 考试中提出。

1.下面的C函数以一个简单的连接的列表作为输入参数。它通过将最后一个元素移动到列表的前面来修改列表并返回修改后的列表。代码的某些部分留空。

typedef struct node 
{
  int value;
  struct node *next;
}Node;
  
Node *move_to_front(Node *head) 
{
  Node *p, *q;
  if ((head == NULL: || (head->next == NULL)) 
    return head;
  q = NULL; p = head;
  while (p-> next !=NULL) 
  {
    q = p;
    p = p->next;
  }
  _______________________________
  return head;
}

选择正确的替代方法来替换空行。
(A) q = NULL; p-> 下一个 = 头;头 = p;
(B) q->next = NULL;头 = p; p-> 下一个 = 头;
(C) 头 = p; p->next = q; q->next = NULL;
(D) q->next = NULL; p-> 下一个 = 头;头 = p;

答案(D)
当while循环结束时,q包含倒数第二个节点的地址,p包含最后一个节点的地址。所以我们需要在while循环之后做以下事情。
i) 将 q 的 next 设置为 NULL (q->next = NULL)。
ii) 将 p 的 next 设置为 head (p->next = head)。
iii) 将头设为 p ( head = p)
步骤 (ii) 必须在步骤 (iii) 之前进行。如果我们先改变头,那么我们就失去了原始链表中头节点的跟踪。
有关更多详细信息,请参阅 https://www.geeksforgeeks.org/?p=6850。

长度为10种的用途2.一种哈希表开放用散列函数H(K)= K国防部10寻址,和线性探测。将6个值插入到一个空的哈希表中后,该表如下图所示。

以下哪个选项给出了键值插入表中的可能顺序?
(一) 46、42、34、52、23、33
(乙) 34, 42, 23, 52, 33, 46
(C) 46、34、42、23、52、33
(四) 42, 46, 33, 23, 34, 52

答案 (C)
序列 (A) 不会创建哈希表,因为元素 52 在该序列中出现在 23 之前。
序列 (B) 不会创建哈希表,因为元素 33 在该序列中出现在 46 之前。
序列 (C) 创建哈希表,因为 42、23 和 34 出现在 52 和 33 之前,46 出现在 33 之前。
序列 (D) 不会创建哈希表,因为元素 33 在该序列中出现在 23 之前。

使用相同的散列函数的键值和线性探测将导致如上所示的哈希表3.多少不同插入序列?
(一) 10
(乙) 20
(C) 30
(四) 40

答案 (C)
在一个有效的插入序列中,元素 42、23 和 34 必须出现在 52 和 33 之前,并且 46 必须出现在 33 之前。
总数不同序列= 3! ×5 = 30
在上述表达式中,3!为元件42,23和34,因为它们可以以任何顺序出现,并且图5是用于元件46,因为它可以在5个不同的地方出现。

请参阅 GATE Corner 了解所有往年论文/解决方案/解释、教学大纲、重要日期、笔记等。