GATE Solved Paper 2017-19 - GATE 2017 Shift 1

17. Consider the C code fragment given below.
typedef struct node
{
int data;
node* next ;
} node;
void join(node* m, node* n)
{
node* p = n;
while (p->next != NULL)
{
p = p->next;
}
p–>next = m;
}
Assuming that m and n point to valid NULL- terminated linked lists, invocation of join will

  • Option : B
  • Explanation :
    In the given questions
    If lists are not NULL : Invocation of join will append list m to the end of list n if the lists are not NULL.
    Example:Before join operation :
    m =1->2->3->4->5->null
    n =6->7->8->9->nullAfter join operation :
    6->7->8->9->1->2->3->4->5->null
    & If lists are NULL : If the list n is empty and itself NULL, then joining and referencing would obviously create NULL pointer issue.
Cancel reply
Cancel reply

19. Consider the following intermediate program in three address code
p = a - b
q = p * c
p = u * v
q = p + q
Which one of the following corresponds to a static single assignment form of the above code?

  • Option : B
  • Explanation :
    According to Static Single Assignment
    --> A variable cannot be used more than once in the LHS
    --> A variable should be initialized atmost once.
    Now looking at the given options
    1. a – code violates condition 1 as p1 is initialized again in this statement: p1 = u * v
    2. c- code is not valid as q1 = p2 * c , q2 = p4 + q3 – In these statements p2, p4, q3 are not initialized anywhere
    3. d- code is invalid as q2 = p + q is incorrect without moving it to register
    Therefore, option B is only correct option.
Cancel reply
Cancel reply