[go: up one dir, main page]

0% found this document useful (0 votes)
16 views59 pages

PROG16

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views59 pages

PROG16

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 59

Karadeniz Technical University COM 2005 Data Structures

Department of Computer Engineering Midterm Exam, 23.11.2024, 10:00


Lecturer Ömer ÇAKIR Duration : 90 Minutes
SOLUTIONS

void CircularlyLinkedList::
newAdd(const string& e, const int& i)
{
CircularlyNode* newNode = new CircularlyNode;
newNode->elem = e;
newNode->score = i;

if (cursor == NULL)
{
newNode->next = newNode;
cursor = newNode;
return;
}

CircularlyNode* back = cursor;

while (newNode->score < back->next->score)


{
if (back->next == cursor)
{
newNode->next = back->next->next;
back->next->next = newNode;
cursor = cursor->next;
return;
}
back = back->next;
}

newNode->next = back->next;
back->next = newNode;
}

int main()
{
CircularlyLinkedList list;

list.newAdd("Paul", 720);
list.newAdd("Rose", 590);
list.newAdd("Anna", 660);
list.newAdd("Mike", 1105);
list.newAdd("Rob", 750);
list.newAdd("Jack", 510);
list.newAdd("Jill", 740);

list.print(); // prints cursor->next first !


}

1. What is the output of the program above? (30P)

Mike 1105
Rob 750
Jill 740
Paul 720
Anna 660
Rose 590
Jack 510
void BinaryTree::eulerLike(TreeNode* v) const SinglyLinkedList SinglyLinkedList::
{ uniLists(SinglyLinkedList list2)
if (v->left != NULL) {
{ SinglyLinkedList tekList;
cout << v->elem; SinglyNode* plist1 = head;
eulerLike(v->left); SinglyNode* plist2 = list2.head;
}
while ((plist1 != NULL) || (plist2 != NULL))
{
if (v->right != NULL)
if (plist1 == NULL)
{
{
cout << v->elem; tekList.addBack(plist2->score);
eulerLike(v->right); plist2 = plist2->next; continue;
} }

cout << v->elem; if (plist2 == NULL)


} {
tekList.addBack(plist1->score);
int main() plist1 = plist1->next; continue;
{ }
BinaryTree binaryTree;
binaryTree.addNode(binaryTree.root, 4); if (plist1->score < plist2->score)
binaryTree.addNode(binaryTree.root, 2); {
binaryTree.addNode(binaryTree.root, 6); tekList.addBack(plist1->score);
binaryTree.addNode(binaryTree.root, 1); plist1 = plist1->next;
binaryTree.addNode(binaryTree.root, 3); }
binaryTree.addNode(binaryTree.root, 5);
if (plist2->score < plist1->score)
binaryTree.addNode(binaryTree.root, 7);
{
tekList.addBack(plist2->score);
binaryTree.eulerLike(binaryTree.root); plist2 = plist2->next;
} }

2. What is the output of the program above? (20P) if (plist1->score == plist2->score)


{
4 2 1 2 3 2 4 6 5 6 7 6 4 plist1 = plist1->next;
plist2 = plist2->next;
}
3. How many times does the function eulerLike() call }
return tekList;
itself recursively? (20P) }
A)4 B)6 C)8 D)10 E)12 int main()
{
SinglyLinkedList list1;
list1.addBack(1);
list1.addBack(2);
list1.addBack(3);
list1.addBack(4);
list1.addBack(5);

SinglyLinkedList list2;
list2.addBack(1);
list2.addBack(3);
list2.addBack(5);
list2.addBack(7);
list2.addBack(9);

SinglyLinkedList tekList =
list1.uniLists(list2);
tekList.print();
}

4. What is the output of the program above? (30P)

2
4
7
9
Karadeniz Technical University COM 2005 Data Structures
Department of Computer Engineering Resit Exam, 05.02.2024, 15:00
Lecturer Ömer ÇAKIR Duration : 105 Minutes

SOLUTIONS

p 8 16 24

4 12 20 28

1 2 3 5 6 7 9 10 11 13 14 15 17 18 19 21 22 23 25 26 27 30

1. Assuming 29 is inserted into the 2-3-4 tree above,


DoublyLinkedList* pLeft = new DoublyLinkedList;
pLeft->insertOrdered(p->hNextScr(1)); which node does pLeft point to after insertion? (20P)

DoublyLinkedList* pRight = new DoublyLinkedList;


pRight->insertOrdered(p->hNextScr(3)); 8
if (p->downPtr(1)->down != NULL)
{ 2. Draw the 2-3-4 tree after inserting 29. (20P)
pLeft->downPtr(1)->down = p->downPtr(1)->down;
pLeft->downPtr(1)->down->up = pLeft->downPtr(1);
}

29 30
if (p->downPtr(2)->down != NULL)

28
{

27
pLeft->downPtr(2)->down = p->downPtr(2)->down;
pLeft->downPtr(2)->down->up = pLeft->downPtr(2);

25 26
}

if (p->downPtr(3)->down != NULL)
24

{ 21 22 23
pRight->downPtr(1)->down = p->downPtr(3)->down;
pRight->downPtr(1)->down->up =pRight->downPtr(1);
}
20

if (p->downPtr(4)->down != NULL)
19

{
18

pRight->downPtr(2)->down = p->downPtr(4)->down;
pRight->downPtr(2)->down->up =pRight->downPtr(2);
17

}
16

15

DoublyLinkedList* pUpper = new DoublyLinkedList;


14

pUpper->insertOrdered(p->hNextScr(2));
root = pUpper;
13
12

pUpper->downPtr(1)->down = pLeft;
11

pLeft->up = pUpper->downPtr(1);
10

pUpper->downPtr(2)->down = pRight;
9

pRight->up = pUpper->downPtr(2);
8

7
6
5
4

3
2
1
int main()
int binarySum(int A[], int i, int n) {
{ CircularlyLinkedQueue Queue;
if (n == 1)
return A[i]; Queue.enqueue(1);
else Queue.enqueue(4);
{ Queue.enqueue(6);
int Sum = binarySum(A, i, n / 2) + Queue.enqueue(1);
binarySum(A, i + n / 2, n / 2);
cout << Sum << " "; Queue.dequeue();
return Sum; Queue.dequeue();
} Queue.dequeue();
}
Queue.enqueue(9);
int main() Queue.enqueue(6);
{ Queue.enqueue(7);
int A[16]= { 0,1,0,3,0,5,0,7,0,9,0,11,0,13,0,15};
int binSum = binarySum(A, 0, 16); Queue.C.print();
} }

3. What is the output of the program above? (20P) 5. What is the output of the program above? (20P)

1 3 4 5 7 12 16 9 11 20 13 15 28 48 64 1
4. How many times does the function binarySum() call itself 9
recursively? (20P)

6
30
7
Karadeniz Technical University COM 2005 Data Structures
Department of Computer Engineering Midterm Exam, 26.11.2021, 08:30, D-1
Lecturer Ömer ÇAKIR Duration : 61 Minutes
SOLUTIONS

void insertOrdered(DoublyNode* newNode, 1. Which code blocks insert Paul without any recursive call?
DoublyNode* current) (25P)
{ Assume that Header’s and Trailer’s scores are 0.
// CODE BLOCK I You’ll loose 5P from wrong answer.
if ((current == trailer) ||
(newNode->score <= current->score)) (A) I, II
{
newNode->next = current; (B) I, III
newNode->prev = current->prev;
current->prev->next = newNode; (C) II, III
current->prev = newNode;
}
(D) II, IV
else
insertOrdered(newNode, current->next); III, IV
(E)
// CODE BLOCK II
if ((current->next == trailer) ||
(newNode->score <= current->next->score)) 2. Considering Code Block II, how many times does the
{ insertOrdered() function call itself recursively when
newNode->next = current->next; adding nodes that have scores 720, 590, 660 and 1105
newNode->prev = current;
respectively? (25P)
current->next->prev = newNode;
current->next = newNode; Assume that Header’s and Trailer’s scores are 0.
}
else
insertOrdered(newNode, current->next);

// CODE BLOCK III


4
if((newNode->score >= current->next->score) &&
(current->next != trailer))
insertOrdered(newNode, current->next);
else
{
newNode->next = current->next;
newNode->prev = current;
current->next->prev = newNode;
current->next = newNode;
}

// CODE BLOCK IV
if ((newNode->score >= current->score) &&
(current != trailer))
insertOrdered(newNode, current->next);
else
{
newNode->next = current;
newNode->prev = current->prev;
current->prev->next = newNode;
current->prev = newNode;
}
}

int main()
{
DoublyLinkedList list; DoublyNode* newNode;
newNode = new DoublyNode;
newNode->elem = "Paul";
newNode->score = 720;
list.insertOrdered(newNode, list.header);
}
int binarySum(int A[], int i, int n)
{
if (n == 1)
return A[i];
else
{
int Sum = binarySum(A, i, n / 2) +
binarySum(A, i + n / 2, n / 2);
cout << Sum << " ";
return Sum;
}
}

int main()
{
int A[8] = {2,4,6,8,10,12,14,16};
int binSum = binarySum(A, 0, 8);
}

3. What is the output of the program above? (25P)

6 14 20 22 30 52 72

4. How many times does the binarySum() function call


itself recursively? (25P)

14
Karadeniz Technical University COM 2005 Data Structures
Department of Computer Engineering Midterm Exam, 16.11.2022, 08:30
Lecturer Ömer ÇAKIR Duration : 61 Minutes
SOLUTIONS
2. What is the number of recursive insertOrdered()
void insertOrdered( calls of each choise in question 1? (25P)
SinglyNode* newNode,
SinglyNode* previous, SinglyNode* current)
{ A 10 B 9 C 8 D 5 E 4
if ((current == NULL)
|| (newNode->score <= current->score))
{
newNode->next = current;
previous->next = newNode;
}
else
insertOrdered(newNode, current,
current->next);
}

int main()
{
SinglyLinkedList list;
SinglyNode* newNode;

list.head = new SinglyNode;


list.head->elem = "NoName";
list.head->score = 0;
list.head->next = NULL;

newNode = new SinglyNode;


newNode->elem = "....";
newNode->score = ....;
list.insertOrdered(newNode,list.head,list.head);

newNode = new SinglyNode;


newNode->elem = "....";
newNode->score = ....;
list.insertOrdered(newNode,list.head,list.head);

newNode = new SinglyNode;


newNode->elem = "....";
newNode->score = ....;
list.insertOrdered(newNode,list.head,list.head);

newNode = new SinglyNode;


newNode->elem = "....";
newNode->score = ....;
list.insertOrdered(newNode,list.head,list.head);
}

1. Which score order inserts nodes with min recursive call?


(25P) You’ll loose 5P from wrong answer.

(A) 590, 660, 720, 1105

(B) 660, 590, 720, 1105

(C) 590, 1105, 660, 720

(D) 1105, 720, 590, 660

(E) 1105, 720, 660, 590


int main() int main()
{ {
CircularlyLinkedQueue Queue; LinkedStack LStack;

Queue.enqueue(5); LStack.push(5);
Queue.enqueue(4); LStack.push(4);
Queue.enqueue(3); LStack.push(3);
Queue.enqueue(2); LStack.push(2);
Queue.enqueue(1); LStack.push(1);

Queue.dequeue(); cout << "Top = " << LStack.top() << endl;


Queue.dequeue();
Queue.dequeue(); LStack.pop();
LStack.pop();
LStack.pop();
Queue.enqueue(3);
Queue.enqueue(4); LStack.push(1);
Queue.enqueue(5); LStack.push(2);
LStack.push(3);
Queue.C.print();
} cout << "Top = " << LStack.top() << endl;
}

3. What is the output of the program above? (25P)


4. What is the output of the program above? (25P)

2 1
1 3
3
4
5
Karadeniz Technical University COM 2005 Data Structures
Department of Computer Engineering Midterm Exam, 01.12.2023, 13:00
Lecturer Ömer ÇAKIR Duration : 105 Minutes
CEVAPLAR

void newAdd(CircularlyNode* newNode,


2. What is the number of newAdd() recursive
CircularlyNode* front, CircularlyNode* back) calls for newNode → ["Jack",510] ? (20P)
{
if (newNode->score < front->score)
{
back = front; 3
front = front->next;
if (back == cursor)
{
cursor->next = newNode;
newNode->next = front;
cursor = cursor->next;
return;
}
newAdd(newNode, front, back);
}
else
{
back->next = newNode;
newNode->next = front;
}
}

int main()
{
CircularlyLinkedList list;
list.add("Paul", 720);

CircularlyNode* newNode = new CircularlyNode;


newNode->elem = "Rose";
newNode->score = 590;
list.newAdd(newNode, list.cursor->next, list.cursor);

newNode = new CircularlyNode;


newNode->elem = "Anna";
newNode->score = 660;
list.newAdd(newNode, list.cursor->next, list.cursor);

newNode = new CircularlyNode;


newNode->elem = "Mike";
newNode->score = 1105;
list.newAdd(newNode, list.cursor->next, list.cursor);

newNode = new CircularlyNode;


newNode->elem = "Jack";
newNode->score = 510;
list.newAdd(newNode, list.cursor->next, list.cursor);

list.print(); // prints cursor->next first


}

1. What is the output of the program above? (20P)

Mike 1105
Paul 720
Anna 660
Rose 590
Jack 510
int binarySum(int A[], int i, int n) int main()
{ {
if (n == 1) CircularlyLinkedQueue Queue;
return A[i];
else Queue.enqueue(4);
{ Queue.enqueue(3);
int Sum = binarySum(A, i, n / 2) + Queue.enqueue(2);
binarySum(A, i + n / 2, n / 2); Queue.enqueue(1);
cout << Sum << " ";
return Sum; Queue.dequeue();
} Queue.dequeue();
}
Queue.enqueue(5);
int main() Queue.enqueue(6);
{
int A[16]= { 1,2,0,3,4,0,5,6,0,7,0,8,0,9,0,10}; Queue.dequeue();
int binSum = binarySum(A, 0, 16); Queue.dequeue();
}
Queue.enqueue(3);
Queue.enqueue(7);
3. What is the output of the program above? (20P) Queue.C.print();
}
3 3 6 4 11 15 21 7 8 15 9 10 19 34 55
5. What is the output of the program above?
(20P)
4. How many times does the function binarySum() call
itself recursively? (20P)

5
30
6
3
7
Karadeniz Technical University COM 2005 Data Structures
Department of Computer Engineering Final Exam, 15.01.2024, 08:30
Lecturer Ömer ÇAKIR Duration : 61 Minutes

SOLUTIONS

2. Draw the 2-3-4 tree after inserting 22? (25P)


DoublyLinkedList* pLeft = new DoublyLinkedList;
pLeft->insertOrdered(p->hNextScr(1)); 16

DoublyLinkedList* pRight = new DoublyLinkedList;


pRight->insertOrdered(p->hNextScr(3));

if (p->downPtr(1)->down != NULL)
{ 8 24
pLeft->downPtr(1)->down = p->downPtr(1)->down;
pLeft->downPtr(1)->down->up = pLeft->downPtr(1);
}

if (p->downPtr(2)->down != NULL) 2 4 6 10 12 14 18 20 22 28
{
pLeft->downPtr(2)->down = p->downPtr(2)->down;
pLeft->downPtr(2)->down->up = pLeft->downPtr(2);
} 1 2 3 4 5 6 7 8
if (p->downPtr(3)->down != NULL)
{ 3. Assume that the numbers above are inserted
pRight->downPtr(1)->down = p->downPtr(3)->down;
into a binary tree. Which tree traversal methods
pRight->downPtr(1)->down->up = pRight->downPtr(1);
} output the same result? (25P)
(A) inorder & preorder
if (p->downPtr(4)->down != NULL)
{ (B) inorder & postorder
pRight->downPtr(2)->down = p->downPtr(4)->down; (C) preorder & postorder
pRight->downPtr(2)->down->up = pRight->downPtr(2);
} (D) inorder & preorder & postorder

DoublyLinkedList* pUpper = new DoublyLinkedList; 4. What is the output of eulerTour traversal of


pUpper->insertOrdered(p->hNextScr(2));
root = pUpper; the binary tree above? (25P)

pUpper->downPtr(1)->down = pLeft; 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
pLeft->up = pUpper->downPtr(1);

pUpper->downPtr(2)->down = pRight;
pRight->up = pUpper->downPtr(2);

p 8 16 24

2 4 6 10 12 14 18 20 28

1. Assuming 22 is inserted into the 2-3-4 tree above, which node


does pLeft point to after insertion? (25P)

8
Karadeniz Teknik Üniversitesi BIL 2001 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Bütünleme Sınavı, 01.02.2019, 13:00, D-2
Öğr.Gör. Ömer ÇAKIR Süre : 100 Dakika
CEVAPLAR

8 4 12 2 6 10 14 1 3 5 7 9 11 13 15
void insertOrdered(SinglyNode* newNode,
SinglyNode* current)
{ 2. Yukarıdaki verilerin ikili ağaca eklendiği varsayılsın. Bu
if(...........................................) ağacın inorder, preorder ve postorder gezinme çıktıları
{ ile yeni ağaçlar oluşturulduğunda bu ağaçların hangisi ilk
newNode->next = current->next; ağaçla aynı olur? (25P)
current->next = newNode; Yanlış cevaptan 5P kırılacaktır.
}
else (A) inorder
insertOrdered(newNode, current->next);
}
(B) preorder
int main()
{ (C) postorder
SinglyLinkedList list; SinglyNode* newNode;

list.head = new SinglyNode;


list.head->score = 0;
list.head->next = NULL;

newNode = new SinglyNode;


newNode->elem = "Paul"; newNode->score = 720;
list.insertOrdered(newNode, list.head);

newNode = new SinglyNode;


newNode->elem = "Rose"; newNode->score = 590;
list.insertOrdered(newNode, list.head);

newNode = new SinglyNode;


newNode->elem = "Anna"; newNode->score = 660;
list.insertOrdered(newNode, list.head);

newNode = new SinglyNode;


newNode->elem = "Mike"; newNode->score = 1105;
list.insertOrdered(newNode, list.head);
}

1. insertOrdered() fonksiyonunu tamamlayınız. (25P)


Yanlış cevaptan 5P kırılacaktır.

(A) if ((current == NULL)


|| (newNode->score <= current->score))

(B) if ((current->next == NULL)


|| (newNode->score <= current->score))

(C) if ((current == NULL)


|| (newNode->score <= current->next->score))

(D) if ((current->next == NULL)


|| (newNode->score <= current->next->score))
1 8
void insertOrdered(const string& e, const int& i)
{
DoublyNode* newNode = new DoublyNode; 3 1 9
newNode->elem = e;
newNode->score = i;
2 5
5 11
DoublyNode* current = header->next;

while (current != trailer) 4 7


{ 3 7 10 13
if (newNode->score >= current->score)
current = current->next; 6 9
else 2 4 6 12 15
break;
11
}
14
newNode->next = current; 10 13
newNode->prev = current->prev;
............... = ...............;
12 15
............... = ...............;
}
14

3. insertOrdered() fonksiyonundaki ..... satırları için


4. Yukarıda soldaki Splay ağacına 8’i ekleyiniz. Ağacın son
aşağıda verilen kodlardan hangisi listeye hatalı ekleme
halini sağdaki boş ağaca yazınız. (25P)
yapar? (25P) Yanlış cevaptan 5P kırılacaktır.

(A) current->prev->next = newNode;


newNode->next->prev = newNode;

(B) current->prev->next = newNode;


current->prev = newNode;

(C) current->prev = newNode;


current->prev->next = newNode;

(D) newNode->prev->next = newNode;


newNode->next->prev = newNode;

(E) newNode->next->prev = newNode;


newNode->prev->next = newNode;
Karadeniz Teknik Üniversitesi BIL 2001 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Arasınav, 12.11.2019, 15:00
Öğr.Gör. Ömer ÇAKIR Süre : 90 Dakika
CEVAPLAR

void traverse(TreeNode* v) 1 2 3 4 5 6 7 8
{
if (v->left != NULL) 2. Yukarıdaki verilerin ikili ağaca eklendiği varsayılsın. Bu
{ ağacın inorder, preorder ve postorder gezinme
traverse(v->left); çıktılarından hangisi diğer ikisinden farklıdır? (25P)
cout << v->elem << " "; Yanlış cevaptan 5P kırılacaktır.
}
(A) inorder
if (v->right != NULL)
{ (B) preorder
traverse(v->right);
} (C) postorder
}

1. main()’de aşağıdaki ağacın rootu ile çağrıldığı


varsayılan traverse() fonksiyonunun çıktısı nedir? (25P)

2 4 6 8 10 12 14

4 12

2 6 10 14

1 3 5 7 9 11 13 15
void insertOrdered(string& e, int& i) SinglyLinkedList* mergeLists(SinglyLinkedList*
{ list2)
DoublyNode* newNode = new DoublyNode; {
newNode->elem = e; SinglyLinkedList* mergedList =
newNode->score = i; new SinglyLinkedList();
SinglyNode* plist1 = this->head;
DoublyNode* current = header; SinglyNode* plist2 = list2->head;

while (current->next != trailer) while ((plist1 != NULL) || (plist2 != NULL))


{ {
if (newNode->score >= current->next->score) if (plist1 == NULL)
current = current->next; {
else mergedList->addBack(plist2->elem,
break; plist2->score);
} plist2 = plist2->next; continue;
}
newNode->next = current->next;
newNode->prev = current; if (plist2 == NULL)
............... = ...............; {
............... = ...............; mergedList->addBack(plist1->elem,
} plist1->score);
plist1 = plist1->next; continue;
}
3. insertOrdered() fonksiyonundaki ..... satırları için
if (plist1->score <= plist2->score)
aşağıda verilen kodlardan hangisi listeye hatalı ekleme {
yapar? (25P) Yanlış cevaptan 5P kırılacaktır. mergedList->addBack(plist1->elem,
plist1->score);
plist1 = plist1->next;}
(A) newNode->prev->next = newNode; else
newNode->next->prev = newNode; {
mergedList->addBack(plist2->elem,
(B) newNode->next->prev = newNode; plist2->score);
newNode->prev->next = newNode; plist2 = plist2->next;
}
(C) current->next->prev = newNode; }
current->next = newNode; return mergedList;
}
(D) current->next->prev = newNode;
newNode->prev->next = newNode;
4. Yukarıdaki mergeLists() fonksiyonunu tamamlayınız.
(E) newNode->prev->next = newNode; (25P)
current->next->prev = newNode;
Karadeniz Teknik Üniversitesi BIL 2001 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Final, 04.01.2020, 10:00
Öğr.Gör. Ömer ÇAKIR Süre : 100 Dakika
CEVAPLAR

2. Aşağıda verilen sayılar ikili ağaca eklendiğinde


void traverse(TreeNode* v)
ağaçlardan biri diğerlerinden farklı olmaktadır. Farklı olan
{
ağaç hangisidir? (25P)
if (v->left != NULL)
{
(A) 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15
// (A)
traverse(v->left); (B) 8 12 4 14 10 6 2 15 13 11 9 7 5 3 1
// (B) (C) 8 4 2 1 3 6 5 7 12 10 9 11 14 13 15
} (D) 8 4 6 7 5 2 3 1 12 14 15 13 10 11 9
(E) 8 12 10 14 9 11 13 15 4 2 6 1 3 5 7
if (v->right != NULL) (F) 8 4 2 6 1 3 5 7 12 10 14 9 11 13 15
{ (G) 8 12 4 2 3 1 10 9 11 6 5 7 14 15 13
// (C) 8 4 12 2 6 7 5 3 1 14 10 15 13 11 9
(H)
traverse(v->right);
(I) 8 12 4 2 3 1 10 9 11 6 5 7 13 15 14
// (D)
} (J) 8 12 4 2 10 14 6 7 5 15 13 9 11 1 3
}

1. main()’de aşağıdaki ağacın rootu ile çağrıldığı


varsayılan traverse() fonksiyonunda bazı satırlar (A)
(B) (C) (D) şeklinde etiketlendirilmiştir. Bu satırların
herbiri cout << v->elem << " "; olduğunda elde
edilen çıktılardan ikisi aynı olmaktadır. Hangi etiketlerde
çıktılar aynıdır ve çıktı nedir? (25P)

(A) (B) (C) (D)

Çıktı

2 4 6 8 10 12 14

4 12

2 6 10 14

1 3 5 7 9 11 13 15
16
void insertOrdered(string& e, int& i)
{
DoublyNode* newNode = new DoublyNode; 8 24
newNode->elem = e;
newNode->score = i;
4 12 20 28 30 32
DoublyNode* current = header->next;
2 6 10 14 17 22 26 29 31 33 34
while (current != trailer)
{
if (newNode->score >= current->score)
current = current->next; 4. Yukarıdaki 2-3-4 ağacından 16’yı siliniz. Silinmiş halinin
else tamamını aşağıya çiziniz.
break; İpucu → 16’nın yerine 17’yi getiriniz. (25P)
}

newNode->next = current; 16
newNode->prev = current->prev;
............... = ...............;
............... = ...............;
8 24
}

4 12 20 28 30 32
3. insertOrdered() fonksiyonundaki ..... satırları için
aşağıda verilen kodlardan hangisi listeye hatalı ekleme 2 6 10 14 17 22 26 29 31 33 34
yapar? (25P) Yanlış cevaptan 5P kırılacaktır.

8 16 24
(A) current->prev->next = newNode;
newNode->next->prev = newNode;
4 12 20 28 30 32
(B) newNode->next->prev = newNode;
current->prev->next = newNode; 2 6 10 14 17 22 26 29 31 33 34

(C) current->prev->next = newNode; 8 16 28


current->prev = newNode;

(D) newNode->prev->next = newNode; 4 12 20 24 30 32


newNode->next->prev = newNode;
2 6 10 14 17 22 26 29 31 33 34

(E) newNode->next->prev = newNode;


newNode->prev->next = newNode; 8 16 28

4 12 24 30 32

2 6 10 14 17 20 22 26 29 31 33 34

8 17 28

4 12 24 30 32

2 6 10 14 20 22 26 29 31 33 34
Karadeniz Teknik Üniversitesi BIL 2001 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Bütünleme, 24.01.2020, 13:20
Öğr.Gör. Ömer ÇAKIR Süre : 61 Dakika

CEVAPLAR

void traverse(TreeNode* v) 8 7 6 5 4 3 2 1
{
if (v->left != NULL) 2. Yukarıdaki verilerin ikili ağaca eklendiği varsayılsın. Bu
{ ağacın inorder, preorder ve postorder gezinme
traverse(v->left); çıktılarından hangisi diğer ikisinden farklıdır? (30P)
cout << v->elem << " "; Yanlış cevaptan 5P kırılacaktır.
}
(A) inorder
if (v->right != NULL)
{ (B) preorder
cout << v->elem << " ";
traverse(v->right);
(C) postorder
}
}

1. main()’de aşağıdaki ağacın rootu ile çağrıldığı


varsayılan traverse() fonksiyonunun çıktısı nedir? (40P)

2 2 4 4 6 6 8 8 10 10 12 12 14 14

4 12

2 6 10 14

1 3 5 7 9 11 13 15
void insertOrdered(string& e, int& i)
{
DoublyNode* newNode = new DoublyNode;
newNode->elem = e;
newNode->score = i;

DoublyNode* current = header;

while (current->next != trailer)


{
if (newNode->score >= current->next->score)
current = current->next;
else
break;
}

newNode->next = current->next;
newNode->prev = current;
............... = ...............;
............... = ...............;
}

3. insertOrdered() fonksiyonunu tamamlayınız. (30P)


Yanlış cevaptan 5P kırılacaktır.

(A) newNode->next->prev = newNode;


current->next->prev = newNode;

(B) newNode->prev->next = newNode;


current->next = newNode;

(C) current->next->prev = newNode;


newNode->prev->next = newNode;

(D) current->next = newNode;


current->next->prev = newNode;

(E) newNode->prev->next = newNode;


current->next->prev = newNode;
Karadeniz Teknik Üniversitesi BIL 2001 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Final Sınavı, 02.01.2018, 13:00, D-2, D-9
Öğr.Gör. Ömer ÇAKIR Süre : 90 Dakika
CEVAPLAR

void print(DoublyNode* node, bool first) void traverse(Node* v)


{ {
if (first) stack<Node*> stl_stack;
cout << node->elem << endl;
if (node->next != trailer) stl_stack.push(v);
print(node->next, false);
else while (!stl_stack.empty())
cout << node->elem << endl; {
} Node* current = stl_stack.top();

int main() if ((current->right == NULL)


{ && (current->left == NULL))
DoublyLinkedList list; cout << current->elt << " ";
list.insertOrdered("Paul", 720);
list.insertOrdered("Rose", 590); stl_stack.pop();
list.insertOrdered("Anna", 660);
list.insertOrdered("Mike", 1105); if (current->right != NULL)
list.insertOrdered("Rob", 750); stl_stack.push(current->right);
list.insertOrdered("Jack", 510);
list.insertOrdered("Jill", 740); if (current->left != NULL)
list.print(list.header->next, true); stl_stack.push(current->left);
} }
}

1. Yukarıdaki programın çıktısı nedir? (25P)


2. main()’de aşağıdaki ağacın rootu ile çağrıldığı
varsayılan traverse() fonksiyonunun çıktısı nedir?
Jack (25P)
Mike
1 3 5 7 9 11 13 15

4 12

2 6 10 14

1 3 5 7 9 11 13 15
Zig 1
void insertOrdered(DoublyNode* newNode,
Zig-Zig
DoublyNode* current) 6
{ Zig-Zig
if(........................ && ..................) Zig 2
Zig-Zig
insertOrdered(newNode, current->next); Zig-Zig 5
else Zig
{
3
newNode->next = current->next; 4
newNode->prev = current;
current->next->prev = newNode;
current->next = newNode; 4. Yukarıdaki işlemlerle oluşturulan Splay Ağacına verilerin
} hangi sırada eklendiğini bulunuz. (25P)
}

int main()
{
 4 3 5 2 6 1
DoublyLinkedList list; DoublyNode* newNode;
newNode = new DoublyNode; X 1 6 6
newNode->elem = "Paul"; newNode->score = 720;
list.insertOrdered(newNode, list.header); P 2
newNode = new DoublyNode;
P 6 X 1
newNode->elem = "Rose"; newNode->score = 590;
list.insertOrdered(newNode, list.header); 2 P 2 X 1 5 G
newNode = new DoublyNode; G 5
newNode->elem = "Anna"; newNode->score = 660; 5 3
list.insertOrdered(newNode, list.header);
newNode = new DoublyNode; 3 3 4
newNode->elem = "Mike"; newNode->score = 1105;
list.insertOrdered(newNode, list.header); 4 4
}

6 X 6 P 5
3. insertOrdered() fonksiyonunu tamamlayınız. (25P)
Not  Trailer’ın score değerini 0 varsayınız. G 5 P 5 G 2 6 X
Yanlış cevaptan 5P kırılacaktır.
P 2 G 2 3
(A) if ((newNode->score >= current->score)
&& (current != trailer)) X 1 3 3 4
(B) if ((newNode->score >= current->next->score) 4 4
&& (current != trailer))

(C) if ((newNode->score >= current->score)


&& (current->next != trailer)) 2 G 2 X 5

(D) if ((newNode->score >= current->next->score) 5 P 5 P X 2


&& (current->next != trailer))
3 6 X 3 P 3
4 4 G 4

5 5 X 5
P 3 G 4 P 4

X 2 4 G P 3 G 3
X 2

P 4 G 3 X 3 P 4 4

G 3 5 X P 4 P 4 X 3
X 5
Karadeniz Teknik Üniversitesi BIL 2001 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Bütünleme Sınavı, 26.01.2018, 15:00, D2
Öğr.Gör. Ömer ÇAKIR Süre : 90 Dakika
CEVAPLAR

void traverse(Node* v) void traverse(Node* v)


{ {
if (v->left != NULL) stack<Node*> stl_stack;
{ Node* current = v;
traverse(v->left);
} while (true)
{
if (v->right != NULL) if (current != NULL)
{
{
stl_stack.push(current);
cout << v->elt << " ";
current = current->left;
traverse(v->right); }
} else
} {
if (stl_stack.empty())
{
1. main()’de aşağıdaki ağacın rootu ile çağrıldığı return;
varsayılan yukarıdaki traverse() fonksiyonunun çıktısı }
else
nedir? (25P)
{
current = stl_stack.top();
8
if ((current->right != NULL)
&& (current->left != NULL))
cout << current->elt << " ";
4 12
stl_stack.pop();
current = current->right;
}
2 6 10 14
}
}
}
1 3 5 7 9 11 13 15
2. main()’de soldaki ağacın rootu ile çağrıldığı varsayılan
traverse() fonksiyonunun çıktısı nedir? (25P)
2 4 6 8 10 12 14
2 4 6 8 10 12 14
Zig 6
void insertOrdered(DoublyNode* newNode,
DoublyNode* current) Zig-Zig
{ 1
if(........................ && ..................) Zig-Zig
5
Zig
insertOrdered(newNode, current->next);
else Zig-Zig 2
{
newNode->next = current; Zig-Zig 4
newNode->prev = current->prev;
current->prev->next = newNode; Zig 3
current->prev = newNode;
}
}
4. Yukarıdaki işlemlerle oluşturulan Splay Ağacına verilerin
int main() hangi sırada eklendiğini bulunuz. (25P)
{
DoublyLinkedList list; DoublyNode* newNode;
newNode = new DoublyNode;
newNode->elem = "Paul"; newNode->score = 720;
 3 4 2 5 1 6
list.insertOrdered(newNode, list.header);
newNode = new DoublyNode;
newNode->elem = "Rose"; newNode->score = 590;
list.insertOrdered(newNode, list.header);
newNode = new DoublyNode;
newNode->elem = "Anna"; newNode->score = 660;
list.insertOrdered(newNode, list.header);
newNode = new DoublyNode;
newNode->elem = "Mike"; newNode->score = 1105;
list.insertOrdered(newNode, list.header);
}

3. insertOrdered() fonksiyonundaki ..... satırlarına


aşağıdaki kodlardan hangisi yazılmalıdır? (25P)
Not  Header ve Trailer’ın score değerini 0 varsayınız.
Yanlış cevaptan 5P kırılacaktır.

(A) if ((newNode->score >= current->score)


&& (current != trailer))

(B) if ((newNode->score >= current->next->score)


&& (current != trailer))

(C) if ((newNode->score >= current->score)


&& (current->next != trailer))

(D) if ((newNode->score >= current->next->score)


&& (current->next != trailer))
Karadeniz Teknik Üniversitesi BIL 2001 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Arasınav, 20.11.2018, 15:00
Öğr.Gör. Ömer ÇAKIR Süre : 100 Dakika

CEVAPLAR

void ZigZag(TreeNode* v) void traverse(Node* v)


{ {
cout << v->elem << " "; stack<Node*> stl_stack;

if (v->left != NULL) stl_stack.push(v);


{
ZigZag(v->left); while (!stl_stack.empty())
} {
Node* current = stl_stack.top();
if (v->right != NULL)
{ if ((current->right != NULL)
ZigZag(v->right); || (current->left != NULL))
cout << v->elem << " "; cout << current->elem << " ";
}
} stl_stack.pop();

if (current->right != NULL)
1. main()’de aşağıdaki ağacın rootu ile çağrıldığı stl_stack.push(current->right);
varsayılan ZigZag() fonksiyonunun çıktısı nedir? (25P)
 if (current->left != NULL)
stl_stack.push(current->left);
8 4 2 1 3 2 6 5 7 6 4 }
}
12 10 9 11 10 14 13 15 14 12 8

2. main()’de soldaki ağacın rootu ile çağrıldığı varsayılan


8 traverse() fonksiyonunun çıktısı nedir? (25P)

4 12
8 4 2 6 12 10 14

2 6 10 14

1 3 5 7 9 11 13 15
void insertOrdered(DoublyNode* newNode, void strings(string str, int i, int n)
DoublyNode* current)
{
{
if(..................... || ..................)
if (i == n - 1)
{ {
newNode->next = current->next; cout << str << endl;
newNode->prev = current; return;
current->next->prev = newNode; }
current->next = newNode;
} for (int j = i; j < n; j++)
else {
insertOrdered(newNode, current->next); swap(str[i], str[j]);
}
strings(str, i + 1, n);
int main() swap(str[i], str[j]);
{ }
DoublyLinkedList list; DoublyNode* newNode; }

newNode = new DoublyNode; void main()


newNode->elem = "Paul"; newNode->score = 720; {
list.insertOrdered(newNode, list.header); string str = "NEO";
strings(str, 0, str.length());
newNode = new DoublyNode;
}
newNode->elem = "Rose"; newNode->score = 590;
list.insertOrdered(newNode, list.header);

newNode = new DoublyNode; 4. Yukarıdaki programın çıktısı nedir? (25P)


newNode->elem = "Anna"; newNode->score = 660;
list.insertOrdered(newNode, list.header);

newNode = new DoublyNode; NEO


newNode->elem = "Mike"; newNode->score =1105;
list.insertOrdered(newNode, list.header); NOE
}
ENO
EON
3. insertOrdered() fonksiyonunu tamamlayınız. (25P) OEN
Not  header ve trailer’ın score değerini 0 varsayınız.
Yanlış cevaptan 5P kırılacaktır. ONE
(A) if ((current == trailer)
|| (newNode->score <= current->score))

(B) if ((current->next == trailer) NEO


|| (newNode->score <= current->score))

(C) if ((current == trailer)


|| (newNode->score <= current->next->score)) NEO ENO OEN

(D) if ((current->next == trailer) NEO NOE ENO EON OEN ONE


|| (newNode->score <= current->next->score))

İlan edilen programın olduğu klasörde


“solution.cpp” adlı bir dosya var.
Aslında bu bir kod dosyası değil.
Recursive çağrıların detaylı anlatıldığı
bir belge olarak düşünebilirsiniz.
Karadeniz Teknik Üniversitesi BIL 2001 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Final Sınavı, 11.01.2019, 10:00, D-2
Öğr.Gör. Ömer ÇAKIR Süre : 61 Dakika
CEVAPLAR
8 4 12 2 6 10 14 1 3 5 7 9 11 13 15
void insertOrdered(DoublyNode* newNode,
DoublyNode* current) 2. Yukarıdaki verilerin ikili ağaca eklendiği varsayılsın. Bu
{ ağacın inorder, preorder ve postorder gezinme çıktıları
if(...........................................) ile yeni ağaçlar oluşturulduğunda bu yeni ağaçların seviye
{
sayılarının küçükten büyüğe sıralanışı nasıl olur? (25P)
newNode->next = current;
Yanlış cevaptan 5P kırılacaktır.
newNode->prev = current->prev;
current->prev->next = newNode;
current->prev = newNode; (A) inorder < preorder < postorder
}
else (B) inorder < postorder < preorder
insertOrdered(newNode, current->next);
} (C) preorder < inorder < postorder

int main() (D) preorder < postorder < inorder


{
DoublyLinkedList list; DoublyNode* newNode;
(E) postorder < inorder < preorder
newNode = new DoublyNode;
newNode->elem = "Paul"; newNode->score = 720; (F) postorder < preorder < inorder
list.insertOrdered(newNode, list.header->next);

newNode = new DoublyNode;


newNode->elem = "Rose"; newNode->score = 590;
list.insertOrdered(newNode, list.header->next);

newNode = new DoublyNode;


newNode->elem = "Anna"; newNode->score = 660;
list.insertOrdered(newNode, list.header->next);

newNode = new DoublyNode;


newNode->elem = "Mike"; newNode->score =1105;
list.insertOrdered(newNode, list.header->next);
}

1. insertOrdered() fonksiyonunu tamamlayınız. (25P)


Not  header ve trailer’ın score değerini 0 varsayınız.
Yanlış cevaptan 5P kırılacaktır.

(A) if ((current == trailer)


|| (newNode->score <= current->score))

(B) if ((current->next == trailer)


|| (newNode->score <= current->score))

(C) if ((current == trailer)


|| (newNode->score <= current->next->score))

(D) if ((current->next == trailer)


|| (newNode->score <= current->next->score))
8 4 12 2 6 10 14 1 3 5 7 9 11 13 15

3. Yukarıdaki veriler Heap’e eklendiğinde :

a) print() fonksiyonunun çıktısı ne olur? (25P)

0 1 2 9 3 5 10 13 8 4 6 7 12 11 14 15

b) removeMin() sonrası print() fonksiyonunun çıktısı ne olur? (25P)

0 2 3 9 4 5 10 13 8 15 6 7 12 11 14
Karadeniz Teknik Üniversitesi BIL 2001 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Arasınav, 17.11.2016, 15:00, D-2, D-9
Öğr.Gör. Ömer ÇAKIR Süre : 90 Dakika
CEVAPLAR

void traverse(Node* v) void addBack(const string& e, const int& i)


{ {
cout << v->elt << " "; CircularlyNode* v = new CircularlyNode;
v->elem = e;
if (v->left != NULL) v->score = i;
{ // A
traverse(v->left); if (cursor == NULL)
cout << v->elt << " "; {
} // A v->next = v;
cursor = v;
if (v->right != NULL) }
{ // B else
traverse(v->right); {
cout << v->elt << " "; v->next = cursor->next;
} // B
cursor->next = v;
}
cursor = cursor->next;
}
}
1. traverse() fonksiyonunun main()’de aşağıdaki ağacın
rootu ile çağrıldığı varsayıldığında:
2. Dairesel listenin sonuna düğüm ekleyen addBack()
a) // A ile temsil edilen kıvırcık parantezler kapatılırsa çıktı fonksiyonunu tamamlayınız. (20P)
ne olur? (15P)

4 2 1 1 2 3 3 2 4 6 5 5 6 7 7 6 4

b) // B ile temsil edilen kıvırcık parantezler kapatılırsa çıktı


ne olur? (15P)

4 2 1 1 2 3 3 2 4 6 5 5 6 7 7 6 4

2 6

1 3 5 7
void insertOrdered(const string& e, const int& i) #include <iostream>
{ #include <stack>
DoublyNode* newNode = new DoublyNode; using namespace std;
newNode->elem = e;
newNode->score = i; void main()
{
DoublyNode* current = header; stack<int> stl_stack;
while (current->next != trailer)
int temp = 61;
{
if(newNode->score >= current->next->score)
current = current->next; while (temp != 0)
else {
break; stl_stack.push(temp % 2);
} temp = temp / 2;
}
newNode->next = current->next;
newNode->prev = current; while (!stl_stack.empty())
current->next->prev = newNode; {
if (stl_stack.top() == 1)
current->next = newNode;
cout << '1';
}
else
int main() cout << '0';
{
DoublyLinkedList list; stl_stack.pop();
}
list.insertOrdered("Paul", 720);
list.insertOrdered("Rose", 590); getchar();
list.insertOrdered("Anna", 660); }
list.insertOrdered("Mike", 1105);
list.insertOrdered("Rob" , 750);
list.insertOrdered("Jack", 510);
list.insertOrdered("Jill", 740); 4. Yukarıdaki programın çıktısı nedir? (20P)

}
1 1 1 1 0 1
3. insertOrdered() fonksiyonunu tamamlayınız. (30P)
Karadeniz Teknik Üniversitesi BIL 2001 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Final Sınavı, 07.01.2017, 10:00, D-2, D-9
Öğr.Gör. Ömer ÇAKIR Süre : 120 Dakika
CEVAPLAR

void traverse(Node* v) void traverse(Node* v)


{ {
if (v->left != NULL) stack<Node*> stl_stack;
traverse(v->left);
else stl_stack.push(v);
if (v->right == NULL)
cout << v->elt << " "; while (!stl_stack.empty())
{
if (v->right != NULL) Node* current = stl_stack.top();
traverse(v->right); cout << current->elt << " ";
}
stl_stack.pop();

1. main()’de aşağıdaki ağacın rootu ile çağrıldığı if (current->right != NULL)


stl_stack.push(current->right);
varsayılan traverse() fonksiyonunun çıktısı nedir? (25P)
if (current->left != NULL)
8 stl_stack.push(current->left);
}
}
4 12

2. main()’de soldaki ağacın rootu ile çağrıldığı varsayılan


2 6 10 14 traverse() fonksiyonunun çıktısı nedir? (25P)

8 4 2 1 3 6 5 7 12 10 9 11 14 13 15
1 3 5 7 9 11 13 15

1 3 5 7 9 11 13 15
Zig (X:Sol) 4
void insertOrdered(const string& e, const int& i) Zig-Zig (X:Sağ, P:Sağ)
{ Zig-Zag (X:Sağ, P:Sol) 3 5
DoublyNode* newNode = new DoublyNode;
Zig (X:Sol)
newNode->elem = e;
newNode->score = i; Zig-Zag (X:Sağ, P:Sol) 2 6
Zig-Zig (X:Sol, P:Sol)
DoublyNode* current = header; Zig-Zig (X:Sağ, P:Sağ) 1 8
Zig-Zag (X:Sağ, P:Sol)
while (current->next != trailer)
{
if(newNode->score >= current->next->score) 4. Yukarıdaki işlemlerle oluşturulan Splay Ağacına verilerin
current = current->next; hangi sırada eklendiğini bulunuz. (25P)
else
break;
}
 6 1 8 3 2 5 4
newNode->next = current->next;
newNode->prev = current; X G
............... = ...............; 4 5
............... = ...............; P 3 5 G X 4 6
}
2 6 P 3 8
int main()
{ 1 8 2
DoublyLinkedList list; 1
list.insertOrdered("Paul", 720);
list.insertOrdered("Rose", 590); G X
list.insertOrdered("Anna", 660); 5 5
list.insertOrdered("Mike", 1105); P 3 P 3
6 6
list.insertOrdered("Rob" , 750);
list.insertOrdered("Jack", 510); 2 4 X 8 G 2 8
list.insertOrdered("Jill", 740);
1 1
}
P G
3 2
G 2 5 X 1 3 P
3. insertOrdered() fonksiyonundaki ..... satırları için
aşağıda verilen kodlardan hangisi listeye hatalı ekleme 1 6 5 X
yapar? (25P) Yanlış cevaptan 5P kırılacaktır. 8 6

8
(A) newNode->prev->next = newNode;
2 2 2
newNode->next->prev = newNode;
1 3 1 3 1 3

(B) newNode->next->prev = newNode; 5 X 6 P 8 G


newNode->prev->next = newNode; 6 P X 5 8 G 6 P

(C) current->next = newNode; 8 G 5 X


current->next->next->prev = newNode;
X G G X
(D) current->next = newNode; 2 3 3 3
newNode->next->prev = newNode; P G P
1 3 X 2 8 P 1 8 1 8
8 P 1 6 X 2 6 6
(E) current->next = newNode;
current->next->prev = newNode; 6

P
8 8 8 8
X 3 X 3 G 6 G 6

1 6 P 1 6 G X 3 P 1

P 1 X 3

X 8 P G X P
P 6 6 1 1 6 6

G 1 G 1 8 X 6 P 6 P 1 X
8 X
Karadeniz Teknik Üniversitesi BIL 2001 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Bütünleme Sınavı, 27.01.2017, 15:00, D-2
Öğr.Gör. Ömer ÇAKIR Süre : 100 Dakika
CEVAPLAR

void traverse1(Node* v) void traverse(Node* v)


{ {
if (v->left != NULL) traverse1(v->left); stack<Node*> stl_stack;
else cout << v->elt << " "; Node* current = v;
if (v->right != NULL) traverse1(v->right);
} while (true)
{
void traverse2(Node* v)
if (current != NULL)
{
{
if (v->left != NULL) traverse2(v->left);
stl_stack.push(current);
if (v->right != NULL) traverse2(v->right);
else cout << v->elt << " "; current = current->left;
} }
else
void traverse3(Node* v) {
{ if (stl_stack.empty())
if (v->left == NULL) cout << v->elt << " "; {
else traverse3(v->left); return;
if (v->right != NULL) traverse3(v->right); }
} else
{
void traverse4(Node* v) current = stl_stack.top();
{ cout << current->elt << " ";
if (v->left != NULL) traverse4(v->left); stl_stack.pop();
if (v->right == NULL) cout << v->elt << " "; current = current->right;
else traverse4(v->right); }
}
}
}
}
1. main()’de aşağıdaki ağacın rootu ile çağrıldığı
varsayılan yukarıdaki fonksiyonların çıktıları nelerdir? (20P)
2. main()’de soldaki ağacın rootu ile çağrıldığı varsayılan
traverse() fonksiyonunun çıktısı nedir? (30P)
8

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
4 12

2 6 10 14

1 3 5 7 9 11 13 15

traverse1: 1 3 5 7 9 11 13 15

traverse2: 1 3 5 7 9 11 13 15

traverse3: 1 3 5 7 9 11 13 15

traverse4: 1 3 5 7 9 11 13 15
Zig (X:Sol)
void removeOrdered(const string& e, const int& i) Zig-Zig (X:Sağ, P:Sağ)
4
{
Zig-Zig (X:Sol, P:Sol)
if(head == NULL)
Zig (X:Sol)
1 7
{
cout << "List is empty !" << endl; return; Zig-Zig (X:Sağ, P:Sağ)
} Zig-Zag (X:Sol, P:Sağ) 3 6 8
Zig-Zag (X:Sağ, P:Sol)
if ((strcmp((char*)&head->elem, (char*)&e))
&& (head->score == i)) Zig-Zag (X:Sağ, P:Sol)
{
SinglyNode* temp = head; 4. Yukarıdaki işlemlerle oluşturulan Splay Ağacına verilerin
head = head->next;
delete temp; hangi sırada eklendiğini bulunuz. (25P)
return;
}
 6 3 8 1 7 4
SinglyNode* current = head;

while (current->next != NULL)


{
if ((strcmp((char*)&current->next->elem,(char*)&e))
&& (current->next->score == i))
{
SinglyNode* temp = current->next;
current->next = current->next->next;
delete temp;
return;
}

current = current->next;
}

if (current->next == NULL)
cout << "\n" << e << " is not found" << endl;
}

3. removeOrdered() fonksiyonunu tamamlayınız. (25P)


İpucu  Silinecek eleman current->next ‘tir.
Karadeniz Teknik Üniversitesi BIL 2001 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Arasınav, 16.11.2017, 13:00
Öğr.Gör. Ömer ÇAKIR Süre : 90 Dakika
CEVAPLAR
2. İkili ağaçtan “çocuklu” düğüm silinmelerinde dengeli bir
void SinglyLinkedList::removeBack() ağaç elde etmek üzere düğüm silme algoritmasında bir
{
iyileştirme yöntemi öneriniz. (25P)
if (head == NULL)
{
cout << "List is empty !" << endl;
1. İyileştirme
return;
Bilindiği gibi ikili ağaçtan çocuklu düğümler
}
silinirken yerine ya kendisinden büyük en küçük
(KBEK) ya da kendisinden küçük en büyük (KKEB)
SinglyNode* prev = head;
düğüm yazılır.
if (prev->next == NULL) Ağaçtan silinecek düğümün sol alt ağacındaki ve
{ sağ alt ağacındaki toplam düğüm sayıları
head = NULL; karşılaştırılır. Sol alt ağaçtaki düğüm sayısı fazla
delete prev; ise KKEB; sağ alt ağaçtaki düğüm sayısı fazla ise
} de KBEK uygulanır. Alt ağaçlardaki düğüm
else sayıları, ağaçta gezinme fonksiyonlarından
{ herhangi birinde küçük bir değişiklik yapılarak
while (........................) hesaplanabilir.
........................
2. İyileştirme
........................ Düğüm (node) structure'ına sol ve sağ alt
........................ ağaçlardaki düğümlerin sayısını tutacak birer int
değişken eklenir ve düğümler ağaca eklenirken
}
} değişkenler ++ yapılarak güncellenir. Herhangi bir
düğüm silinirken bu değişkenler karşılaştırılır ve
KKEB veya KBEK yaklaşımlarından hangisinin
1. removeBack() fonksiyonundaki ..... satırlarına uygulanacağına karar verilir.
aşağıdaki kodlardan hangisi yazılmalıdır? (25P)
Yanlış cevaptan 5P kırılacaktır.

(A) while (prev->next->next != NULL)


prev = prev->next;
prev->next = NULL;
delete prev->next;

(B) while (prev->next->next != NULL)


prev = prev->next;
delete prev->next;
prev->next = NULL;

(C) while (prev->next != NULL)


prev = prev->next;
delete prev->next;
prev->next = NULL;

(D) while (prev->next != NULL)


prev = prev->next;
prev->next = NULL;
delete prev->next;
void tree(int i, int j, int p, int n, int k) void print(DoublyNode* first, DoublyNode* last)
{ {
if (i < 1) return; if ((first->elem.compare(last->elem)== 0)
&& (first->score == last->score))
.................. cout << first->elem << endl;
else
if (n == k) print(first->next, last->prev);
............................... }
else
tree(i, j + p, p, n + 1, k); int main()
} {
DoublyLinkedList list;
int main()
{ list.insertOrdered("Paul", 720);
tree(8, 8, 16, 1, 1); list.insertOrdered("Rose", 590);
} list.insertOrdered("Anna", 660);
list.insertOrdered("Mike", 1105);
list.insertOrdered("Rob", 750);
3. Programda …… ile temsil edilen satırlar aşağıdakilerden list.insertOrdered("Jack", 510);
list.insertOrdered("Jill", 740);
hangisi olursa çıktı 8 4 12 2 6 10 14 1 3 5 7 9 11 13 15
şeklinde olur? (25P) list.print(
Yanlış cevaptan 5P kırılacaktır.
list.header->next,
list.trailer->prev);
(A) cout << i << endl; }
tree(i / 2, i / 2, p / 2, 1, k * 2);

(B) cout << i << endl; 4. Yukarıdaki programın çıktısı nedir? (25P)
tree(i / 2, j / 2, p / 2, 1, k * 2);

(C) cout << j << endl; Paul


tree(i / 2, i / 2, p / 2, 1, k * 2);

(D) cout << j << endl;


tree(i / 2, j / 2, p / 2, 1, k * 2);
Karadeniz Teknik Üniversitesi BIL 205 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Bütünleme, 22.01.2015, 13:00, D-2,D-8
Öğr.Gör. Ömer ÇAKIR Süre : 75 Dakika
CEVAPLAR - A

void bitOrder(Node* v)
{
if (v->left != NULL)
{
cout << v->elt << " ";
bitOrder(v->left);
}
else
cout << v->elt << " ";

if (v->right != NULL)
bitOrder(v->right);
}

void main()
{
LinkedBinaryTree Tree;

Tree.addRoot();
Tree.root->elt = 8;

Tree.addBelowRoot(Tree.root, 4);
Tree.addBelowRoot(Tree.root, 12);
Tree.addBelowRoot(Tree.root, 2);
Tree.addBelowRoot(Tree.root, 6);
Tree.addBelowRoot(Tree.root, 10);
Tree.addBelowRoot(Tree.root, 14);
Tree.addBelowRoot(Tree.root, 1);
Tree.addBelowRoot(Tree.root, 3);
Tree.addBelowRoot(Tree.root, 5);
Tree.addBelowRoot(Tree.root, 7);
Tree.addBelowRoot(Tree.root, 9);
Tree.addBelowRoot(Tree.root, 11);
Tree.addBelowRoot(Tree.root, 13);
Tree.addBelowRoot(Tree.root, 15);

cout<< "Preorder Traversal : " ;


bitOrder(Tree.root);
}

1. Yukarıdaki programın çıktısı nedir? (40P)

8 4 2 1 3 6 5 7 12 10 9 11 14 13 15
16
void addFront(const int& i)
{
add(header->next, i); 8 24
}
4 12 20 28

void add(DoublyNode* v, int& i)


{ 2 6 10 14 18 22 26 30
DoublyNode* u = new DoublyNode;
u->score = i; 1 5 9 13 19 23 27 31
u->prev = v->prev;
v->prev = u;
if( p->right != NULL) // p silinene işaret eder
v->prev->next = u;
{
u->next = v;
temp = p->right;
}
while (temp->left != NULL) temp = temp->left;
p->elt = temp->elt;
void main()
{
if(temp->right != NULL)
DoublyLinkedList list;
{
list.addFront(750);
temp->par->left = temp->right;
list.addFront(720);
temp->right->par = temp->par;
}
}
else
{
2. addFront() çağrıları sonrası listenin son hali hangisidir? temp->par->left = NULL;
(Yanlış cevaptan 5P kırılacaktır) (30P) }

(A) delete temp;


return;
}
750 720
3. Yukarıdaki koda göre ağaçtan 24 silindiğinde son hali ne
Header Trailer
olur? Ağacın tamamını çiziniz. (30P)
(B)
720 750
16
Header Trailer
(C)
8 26

750 720 4 12 20 28

Header Trailer 2 6 10 14 18 22 27 30
(D)
1 5 9 13 19 23 31
720 750

Header Trailer

(E)

750 720

Header Trailer
Karadeniz Teknik Üniversitesi BIL 1052 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Arasınav, 12.11.2015, 13:00, D-2, D-9
Öğr.Gör. Ömer ÇAKIR Süre : 100 Dakika
CEVAPLAR

1. Yandaki programın çıktısı nedir? (30P)


void fList( DoublyLinkedList* list,
DoublyLinkedList* list1,
DoublyLinkedList* list2)
{
DoublyNode* nodeA = NULL;
DoublyNode* nodeB = NULL;

while (!list->empty())
{
nodeA = list->header->next;
nodeB = list->header->next->next;

while (nodeB != list->trailer)


{
if (nodeB->score < nodeA->score)
{
nodeA = nodeB;
nodeB = nodeB->next;
}
else nodeB = nodeB->next;
}

list1->addBack(nodeA->elem, nodeA->score);

list->remove(nodeA);

nodeA = list->header->next;
nodeB = list->header->next->next;

while (nodeB != list->trailer && !list->empty())


{
if (nodeB->score > nodeA->score)
{
nodeA = nodeB;
nodeB = nodeB->next;
}
else nodeB = nodeB->next;
}

if (!list->empty())
{
list2->addFront(nodeA->elem, nodeA->score);
list->remove(nodeA);
}
}
}

void main()
{
DoublyLinkedList* list = new DoublyLinkedList();
list->insertOrdered("Paul", 720);
list->insertOrdered("Rose", 590);
list->insertOrdered("Anna", 660);
list->insertOrdered("Mike", 1105);
list->insertOrdered("Rob", 750);
list->insertOrdered("Jack", 510);
list->insertOrdered("Jill", 740);

DoublyLinkedList* list1 = new DoublyLinkedList();


DoublyLinkedList* list2 = new DoublyLinkedList();
fList(list, list1, list2);

cout << "List 1 :" << endl; list1->printH2T();


cout << "List 2 :" << endl; list2->printH2T();
}
void insertOrdered(const string& e, const int& i) void gList(DoublyLinkedList* list,
{ DoublyNode* hNext, DoublyNode* tPrev)
CircularlyNode* newNode = new CircularlyNode; {
newNode->elem = e; if (hNext == tPrev) return;
newNode->score = i;
if (hNext->next == tPrev)
if (cursor == NULL) {
list->add(hNext, tPrev->elem, tPrev->score);
{
list->remove(tPrev);
newNode->next = newNode;
return;
cursor = newNode; }
return; else
} {
list->add(tPrev, hNext->elem, hNext->score);
if( i < cursor->next->score) hNext = hNext->next;
{ list->remove(hNext->prev);
newNode->next = cursor->next;
cursor->next = newNode; list->add(hNext, tPrev->elem, tPrev->score);
return; tPrev = tPrev->prev;
} list->remove(tPrev->next);

if( i > cursor->score) gList(list, hNext, tPrev->prev);


{ }
newNode->next = cursor->next; }
cursor->next = newNode;
void main()
cursor = cursor->next;
{
return;
DoublyLinkedList* list = new DoublyLinkedList();
}
list->insertOrdered("Paul", 720);
CircularlyNode* front = cursor->next; list->insertOrdered("Rose", 590);
CircularlyNode* back = NULL; list->insertOrdered("Anna", 660);
list->insertOrdered("Mike", 1105);
while( newNode->score > front->score ) list->insertOrdered("Rob", 750);
{ list->insertOrdered("Jack", 510);
back = front; list->insertOrdered("Jill", 740);
front = front->next;
} gList(list, list->header->next, list->trailer->prev);
}
back->next = newNode;
newNode->next = front;
} 3. a) gList() fonksiyonu ne iş yapar? Kısaca açıklayınız. (15P)

2. Düğümleri dairesel bağlı listeye score değerlerine göre


Fonksiyon baştan ve sondan birer düğümü swap
küçükten büyüğe sıralı ekleyen insertOrdered() fonksiyonunda
yaparak liste elemanlarını reverse yapar. Yani
....... ile temsil edilen satırlara gereken kodları ekleyiniz. (35P)
ters sırada dizer.

b) if(hNext->next == tPrev){...} bloğunun alternatifi nedir?


(20P)

if (hNext->next == tPrev)
{
list->add(tPrev->next, hNext->elem, hNext->score);
list->remove(hNext);
return;
}
Karadeniz Teknik Üniversitesi BIL 1052 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Final Sınavı, 03.01.2016, 10:00, D-2, D-9
Öğr.Gör. Ömer ÇAKIR Süre : 90 Dakika

CEVAPLAR - A

1. Liste elemanlarını reverse yapan reverseList()


void reverseList(DoublyLinkedList* list,
fonksiyonunda ..... ile temsil edilen yerlere ait kodlar
DoublyNode* hNext,
DoublyNode* tPrev) sırasıyla aşağıdakilerden hangisidir? (30P)
Yanlış cevaptan 5P kırılacaktır.
{
if (hNext == tPrev) return;
(A) tPrev->next
tPrev->prev
if (hNext->next == tPrev)
{
list->add(hNext, tPrev->elem, tPrev->score); (B) tPrev
list->remove(tPrev); tPrev->next
return;
} (C) tPrev->next
else tPrev
{
list->add(hNext, tPrev->elem, tPrev->score); (D) tPrev
tPrev = tPrev->prev; tPrev->prev
list->remove(tPrev->next);
(E) tPrev->prev
list->add(....., hNext->elem, hNext->score); tPrev
hNext = hNext->next;
list->remove(hNext->prev);

reverseList(list, hNext, .....);


}
}

void main()
{
DoublyLinkedList* list = new
DoublyLinkedList();

list->insertOrdered("Paul", 720);
list->insertOrdered("Rose", 590);
list->insertOrdered("Anna", 660);
list->insertOrdered("Mike", 1105);
list->insertOrdered("Rob", 750);
list->insertOrdered("Jack", 510);
list->insertOrdered("Jill", 740);

cout << "Reversed List :" << endl;

reverseList(list,
list->header->next,
list->trailer->prev);

list->printH2T();
}
16
void LinkedBinaryTree::traverse(Node* p)
{
while (root != NULL)
{ 8 24
while ((p->left != NULL) || (p->right != NULL))
{
if (p->left != NULL)
p = p->left; 4 12 20 28
else
p = p->right;
}
2 6 10 14 18 22 26 30

cout << p->elt << endl;


deleteNode(root, p->elt); 3. Yukarıdaki 2-3-4 ağacından 16’yı siliniz. (35P)
p = root;
} 8 XX 24
}

void main() // Çıktı  1


{ 4 12 20 28
LinkedBinaryTree binaryTree; 3
2
binaryTree.addRoot(); 5 2 6 10 14 18 22 26 30
binaryTree.root->elt = 8;
binaryTree.addBelowRoot(binaryTree.root, 4); 7
binaryTree.addBelowRoot(binaryTree.root, 12); 6
binaryTree.addBelowRoot(binaryTree.root, 2); 4 8 XX
binaryTree.addBelowRoot(binaryTree.root, 6);
binaryTree.addBelowRoot(binaryTree.root, 10); 9
binaryTree.addBelowRoot(binaryTree.root, 14); 11
binaryTree.addBelowRoot(binaryTree.root, 1); 10 4 12 20 24 28
binaryTree.addBelowRoot(binaryTree.root, 3);
binaryTree.addBelowRoot(binaryTree.root, 5); 13
binaryTree.addBelowRoot(binaryTree.root, 7); 15
binaryTree.addBelowRoot(binaryTree.root, 9); 14 2 6 10 14 18 22 26 30
binaryTree.addBelowRoot(binaryTree.root, 11);
binaryTree.addBelowRoot(binaryTree.root, 13); 12
binaryTree.addBelowRoot(binaryTree.root, 15); 8
8 XX
binaryTree.traverse(binaryTree.root);
}

4 12 24 28
2. a) Yukarıdaki programın çıktısı nedir? (20P)

b) Yukarıdaki programın çıktısı hangi ağaç gezinme 2 6 10 14 18 20 22 26 30


yöntemine eşdeğerdir? (15P) Yanlış cevaptan 5P kırılacaktır.

(A) inorder 8 18

(B) preorder
4 12 24 28
(C) postorder

2 6 10 14 20 22 26 30
8

4 12

2 6 10 14

1 3 5 7 9 11 13 15
Karadeniz Teknik Üniversitesi BIL 1052 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Bütünleme Sınavı, 22.01.2016, 10:00, D2-3
Öğr.Gör. Ömer ÇAKIR Süre : 90 Dakika

CEVAPLAR

1. reverseList() fonksiyonunda ..... ile temsil edilen


void reverseList(DoublyLinkedList* list,
DoublyNode* hNext, satırlar aşağıdaki seçeneklerden hangi ikisi olduğunda
DoublyNode* tPrev) printH2T() aynı çıktıyı verir? Çıktı nedir? (40P)
{
if (hNext == tPrev) return;
(A) tPrev
if (hNext->next == tPrev)
{ tPrev
list->add(hNext, tPrev->elem, tPrev->score);
list->remove(tPrev);
return;
(B) tPrev->next
} tPrev->next
else
{
list->add(hNext, tPrev->elem, tPrev->score); (C) tPrev->next
tPrev = tPrev->prev; tPrev->prev
list->remove(tPrev->next);

list->add( ....., hNext->elem, hNext->score); (D) tPrev->next


hNext = hNext->next; tPrev
list->remove(hNext->prev);

reverseList(list, hNext, ..... ); (E) tPrev


} tPrev->prev
}

void main() (F) tPrev->prev


{
DoublyLinkedList* list = new DoublyLinkedList();
tPrev
list->insertOrdered("Paul", 720);
list->insertOrdered("Rose", 590); Eşdeğer seçenekler  ( B ) ve ( E )
list->insertOrdered("Anna", 660);
list->insertOrdered("Mike", 1105);
list->insertOrdered("Rob", 750); Çıktı :
list->insertOrdered("Jack", 510);
list->insertOrdered("Jill", 740);

reverseList(list,
list->header->next,
list->trailer->prev);
list->printH2T();
}
void LinkedBinaryTree::traverse(Node* p) void insertOrdered(string& e, int& i)
{ {
while (root != NULL) CircularlyNode* newNode = new CircularlyNode;
{ newNode->elem = e;
while (p->left != NULL) p = p->left; newNode->score = i;
cout << p->elt << endl;
deleteNode(root, p->elt); if (cursor == NULL)
p = root; {
} newNode->next = newNode;
cursor = newNode;
}
return;
}
void main()
{ // Çıktı CircularlyNode* front = cursor->next;
LinkedBinaryTree Tree; 1 CircularlyNode* back = cursor;
Tree.addRoot(); 2
Tree.root->elt = 8; while( newNode->score > front->score )
Tree.addBelowRoot(Tree.root, 4);
3 {
Tree.addBelowRoot(Tree.root, 12); 4 back = front;
Tree.addBelowRoot(Tree.root, 2); 5 front = front->next;
Tree.addBelowRoot(Tree.root, 6); 6 if (..........................) break;
Tree.addBelowRoot(Tree.root, 10); 7 }
Tree.addBelowRoot(Tree.root, 14);
Tree.addBelowRoot(Tree.root, 1);
8
back->next = newNode;
Tree.addBelowRoot(Tree.root, 3); 9 newNode->next = front;
Tree.addBelowRoot(Tree.root, 5); 10
Tree.addBelowRoot(Tree.root, 7); 11 if (newNode->score > cursor->score)
Tree.addBelowRoot(Tree.root, 9); 12 cursor = cursor->next;
Tree.addBelowRoot(Tree.root, 11); }
Tree.addBelowRoot(Tree.root, 13);
13
Tree.addBelowRoot(Tree.root, 15); 14
15 3. Düğümleri dairesel bağlı listeye score değerlerine göre
binaryTree.traverse(binaryTree.root); küçükten büyüğe sıralı ekleyen insertOrdered()
} fonksiyonunda ....... ile temsil edilen satır için aşağıda
önerilen kodların başına doğru ise D; hatalı ise H yazınız.
(20P) Yanlış cevabın herbirinden 5P kırılacaktır.
2. a) Yukarıdaki programın çıktısı nedir? (20P)
Not Silinen düğümün yerine kendisinden büyük en küçük
düğümün geldiğini varsayınız.
(D) back == cursor
b) Yukarıdaki programın çıktısı hangi ağaç gezinme
yöntemine eşdeğerdir? (20P) Yanlış cevaptan 5P kırılacaktır. (H) back == cursor->next

(A) inorder (H) front == cursor


(B) preorder (D) front == cursor->next
(C) postorder

4 12

2 6 10 14

1 3 5 7 9 11 13 15
Karadeniz Teknik Üniversitesi BIL 205 Veri Yapıları
Bilgisayar Mühendisliği Bölümü 1. Arasınav, 23.11.2012, 15:00, D-2, D-9
Öğr.Gör. Ömer ÇAKIR Süre : 100 Dakika

CEVAPLAR
void insertOrdered(const string& e, const int& i)
{ CircularlyLinkedList C;
DoublyNode* newNode = new DoublyNode;
newNode->elem = e; newNode->score = i; void CircularlyLinkedQueue::enqueue(const string& e)
newNode->next = NULL; newNode->prev = NULL; {
// Kodu buraya yazınız !
if(header->next == trailer) C.add(e);
{//BLOCK 1 C.advance();
newNode->next = trailer;
newNode->prev = header; n++;
header->next = newNode; }
trailer->prev = newNode;
return; void CircularlyLinkedQueue::dequeue()
} {
if (empty())
DoublyNode* current = header->next; {
if(newNode->score < current->score) cout << "dequeue of empty queue" << endl;
{//BLOCK 2 return;
newNode->next = current; }
newNode->prev = current->prev; // Kodu buraya yazınız !
current->prev = newNode;
current->prev->next = newNode;
C.remove();
return;
n--;
}
}
DoublyNode* founded = NULL;
while (current != trailer)
{ 2. Kuyruk veri yapısına ait enqueue() ve dequeue()
if(newNode->score>=current->score) founded=current; fonksiyonlarını, C dairesel bağlı listesinin add(), advance()
else break;
ve remove() fonksiyonları ile gerçeklemek üzere yukarıya
current = current->next;
} gerekli kodları yazınız. Yazdığınız kodları açıklayınız. (20P)
//BLOCK 3
newNode->next = founded->next;
newNode->prev = founded; Dairesel bağlı listede cursor listenin sonuna (back) işaret
founded->next = newNode;
founded->next->prev = newNode; ediyordu. Hem ekleme (add) hem de silme (remove) işlemi
} cursor->next ile yapılıyordu. Yani cursor’ın peşine ekleniyor
veya peşine gelen siliniyordu. Bu bilgiler ışığında :
1. Elemanları çift yönlü bağlı listeye sıralı ekleyen yukarıdaki
insertOrdered() adlı fonksiyonda koyu yazılmış kod enqueue()implementation using C circularly linked list functions :
bloklarının birinde veya birkaçında satırların yerleri Kuyruk veri yapısında veri ekleme (enqueue) kuyruk sonuna
değiştirildiği için program koştuğunda hata vermektedir.
yapıldığından dairesel bağlı listenin add fonksiyonunun
Bu blok veya blokların doğrusunu aşağıya yazınız. (20P)
peşine, cursor yeni eklenene son eleman olarak işaret etsin
diye advance de çağrılmıştır.
BLOCK 1 CORRECT SEQUENCE
dequeue()implementation using C circularly linked list functions :
Kuyruk veri yapısında veri silme (dequeue) kuyruk başından
yapıldığından dairesel bağlı listenin remove fonksiyonu ile
birebir örtüşür. Çünkü dairesel listede de cursor->next yani
ilk eleman silinmektedir.
BLOCK 2 CORRECT SEQUENCE
newNode->next = current;
newNode->prev = current->prev;
current->prev->next = newNode;
current->prev = newNode;
BLOCK 3 CORRECT SEQUENCE
newNode->next = founded->next;
newNode->prev = founded;
founded->next->prev = newNode;
founded->next = newNode;
int tripleSum(int A[], int i, int n) void reverseList(DoublyNode* hNext,DoublyNode* tPrev)
{ {
if (n == 1) return A[i]; if ( hNext == tPrev ) return;
else
{ if(hNext->next == tPrev)
int Sum = tripleSum(A, i + 2*n/3, n/3 ) {
+ tripleSum(A, i + n/3, n/3 ) hNext->next = tPrev->next;
+ tripleSum(A, i, n/3 ); tPrev->next->prev = hNext;
cout << "Sum = " << Sum << endl;
return Sum; tPrev->prev = hNext->prev;
} hNext->prev->next = tPrev;
}
hNext->prev = tPrev;
void main() tPrev->next = hNext;
{
int A[27] = { 1,2,3,4,5,6,7,8,9, return;
10,11,12,13,14,15,16,17,18, }
19,20,21,22,23,24,25,26,27 }; else
{
tripleSum(A, 0, 27); DoublyNode* hNextNext = hNext->next;
} DoublyNode* hNextPrev = hNext->prev;

hNext->next = tPrev->next;
3. Yukarıdaki programın çıktısı nedir? (30P) hNext->prev = tPrev->prev;
İpucu Program ekrana 13 kere Sum = ... yazar. tPrev->prev->next = hNext;
tPrev->next->prev = hNext;
[1..27] arası sayıların toplamı 378’dir.
Toplarken işlem hatası yapmamaya dikkat ediniz ! tPrev->next = hNextNext;
tPrev->prev = hNextPrev;
Sum = 78 hNextPrev->next = tPrev;
hNextNext->prev = tPrev;
Sum = 69
Sum = 60 return reverseList( tPrev->next, hNext->prev);
Sum = 207 }
}
Sum = 51
Sum = 42
Sum = 33 4.
Sum = 126 a) Yukarıda verilen rList() fonksiyonu main() fonksiyonunda
rList(header->next, trailer->prev) parametreleri ile
Sum = 24 çağrıldığında ne iş yapar? (15P)
Sum = 15
Sum = 6 Fonksiyon liste elemanlarını reverse yapar. Yani ters sırada
Sum = 45 dizer.
Sum = 378
b) rList() fonksiyonu kendini recursive olarak neden
rList(tPrev->next, hNext->prev) parametreleri ile
çağırmıştır? (15P)

İlk recursive çağrı öncesi listenin ilk ve son elemanları yer


değiştirildikten sonra baştan ve sondan ikinciler ile recursive
çağrı yapılmalıdır. İlk elemana işaret eden hNext artık son
elemana; son elemana işaret eden tPrev de ilk elemana
işaret etmektedir. O yüzden recursive çağrıda ilk parametre
listenin baştan 2. elemanını göstermek üzere tPrev->next,
ikinci parametre de listenin sondan 2. elemanını göstermek
üzere hNext->prev olmuştur.
Karadeniz Teknik Üniversitesi BIL 205 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Final Sınavı, 10.01.2013, 10:00, D-2, D-9
Öğr.Gör. Ömer ÇAKIR Süre : 100 Dakika

DEĞERLENDİRME
NUMARA : …………………………… AD SOYAD : ………………………………………………….......

Sınavda Uyulması Gereken Kurallar İMZA : …………………………………………….............. [........] ......................

1. Cep telefonlarının saate bakmak için bile olsa herhangi bir amaçla kullanılması yasaktır. Telefon kapalı ve cepte olmalıdır.
2. Sınavın başında sorular kısaca açıklanacaktır. Öğrencilerin soruları cevaplandıktan sonra sınav boyunca soru sormak yasaktır.
3. Soru kağıdına numaranızı ve isminizi yazıp imzalamayı unutmayınız.

void print1(DoublyNode* node) void removeOrdered(const string& e, const int& i)


{ {
cout << node->elem << endl; DoublyNode* current = header->next;
if (node->next == trailer) return;
else print1(node->next); while (current != trailer)
} {
if((current->elem == e) && (current->score == i))
void print2(DoublyNode* node) {
{ current->prev->next = current->next;
if (node == trailer) return;
else print2(node->next); current->next->prev = current->prev;
cout << node->elem << endl;
} delete current;
return;
void main() }
{ current = current->next;
DoublyLinkedList list; }
list.insertOrdered("Paul", 720); // küçükten
list.insertOrdered("Rose", 590); // büyüğe cout << e << " is not found" << endl;
list.insertOrdered("Anna", 660); // sıralı ekle }

list.print1(list.header->next); //(1)
list.print2(list.header->next); //(2) 2. Çift yönlü bağlı listeden eleman silen removeOrdered() adlı
list.print3(list.trailer->prev); //(3) fonksiyondaki boş satırlara gerekli kodları yazınız. (10P)
list.print4(list.trailer->prev); //(4)
}

1. a) print1() ve print2() fonksiyonları main() fonksiyonda


header->next ile çağrıldıklarında çıktıları ne olur? (10P)

print1() Print2()
Rose Paul
Anna Anna
Paul Rose

b) main() fonksiyonda trailer->prev ile çağrıldıklarında


print1() ile aynı çıktıyı verecek print3() fonksiyonunu;
print2() ile aynı çıktıyı verecek print4() fonksiyonunu
yazınız. İpucu  Cevaplar 3 ‘er satır.

void print3(DoublyNode* node) // print1()


{
if (node == header) return; //5P
else print3(node->prev); //5P
cout << node->elem << endl; //5P
}
void print4(DoublyNode* node) // print2()
{
cout << node->elem << endl; //5P
if (node->prev==header) return; //5P
else print4(node->prev); //5P
}
6 5 4 3 2 1 7 16

3.Yukarıdaki verileri splay ağacına yerleştiriniz? (20P)


8 24

4 12 20 28

6 5 4 3
2 6 10 14 18 22 26 30

5 4 6 3 5 2 4 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31

6 5 16

6 4 20

2 1 2 6 18 22

1 3 5 7 17 19 21 23
1 3 2
12 28

4 3
10 14 26 30

5 4 9 11 13 15 25 27 29 31

6 5 4.İkili ağaçtan 8 ve 24’ü yukarıdaki gibi silmek üzere aşağıdaki


kodu tamamlayınız. (20P)

6
if( p->left != NULL && p->right != NULL)
7 {
if(parent->left == p)
{
1 1 1 parent->left = p->left;
p->left->par = parent;
temp = p->left;
2 2 2
while(temp->right != NULL) temp=temp->right;

3 3 4 temp->right = p->right;
temp->right->par = temp;
}
4 4 3 7 else
{
parent->right = p->left;
6 7 6 p->left->par = parent;
temp = p->left;
5 7 6 5 while(temp->right != NULL) temp=temp->right;

5 temp->right = p->right;
temp->right->par = temp;
}
1 2 7
delete p;
}
2 1 7 2
5.Synonym Chaining yöntemini avantajını belirterek açıklayınız.
7 4 1 4 (10P)

Synonym Chaining yönteminde çakışan kayıtlar,


4 3 6 3 6 linear probing gibi bir çakışma çözümleme
yöntemine göre relative.txt’de uygun bir yer
6 5 5 bulunup yazıldıktan sonra bağlı listede
3 tutulurlar. Sorgulama yapılırken çakışma
olduğunda relative.txt’den aramak yerine bağlı
5 listeden çok daha hızlı bir şekilde erişilir.
Karadeniz Teknik Üniversitesi BIL 205 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Bütünleme Sınavı, 31.01.2013, 13:00, D1
Öğr.Gör. Ömer ÇAKIR Süre : 75 Dakika

CEVAPLAR

void print(DoublyNode* node) void removeOrdered(const string& e, const int& i)


{ {
if (node == trailer) return; SinglyNode* current = head;
else print(node->next); SinglyNode* previous = head;
cout << node->elem << endl;
} if((current->elem == e) && (current->score == i) )
{
head = current->next;
void main()
delete current;
{ return;
DoublyLinkedList list; }

list.insertOrdered("Paul", 720); current = current->next;


list.insertOrdered("Rose", 590); while (current != NULL)
list.insertOrdered("Anna", 660); {
if((current->elem == e)&&(current->score == i))
list.print(list.header->next); {
} previous->next = current->next;
delete current;
return;
1. a) Yukarıdaki programın çıktısı nedir? (10P) }

Paul previous = current;


current = current->next;
Anna }
Rose
if(current==NULL) cout<<e<<" is not found"<<endl;
}
b) if(node==trailer) kısmı if(node->next==trailer)
şeklinde olsaydı çıktı ne olurdu? Sebebini açıklayınız. (30P)
ÇIKTI 3. Tek yönlü bağlı listeden eleman silen removeOrdered() adlı
Anna fonksiyondaki boş satırlara gerekli kodları yazınız. (15P)
Rose
4. Kuyruk veri yapısına ait enqueue() ve dequeue()
fonksiyonları, dairesel bağlı listenin add(), advance() ve
print(node->next) recursive çağrıları node==trailer remove() fonksiyonları ile gerçeklenirken dequeue() için
olana dek yapılır. node == trailer olunca return remove() yeterli olurken enqueue() için neden add()‘in
yapıldığında son satıra gelinir cout ile listenin peşine advance() işlemi de yapmak gerekir? (20P)
son elemanı olan Paul yazılır. Çünkü son çağrıda
node=Paul idi. Onun next’i de trailerdır. Diğer
elemanlar da benzeri şekilde sondan başa yazılır.
(Bu sorunun benzeri vizede sorulmuştu)
node->next==trailer olduğunda recursive çağrılar Dairesel bağlı listede cursor listenin sonuna (back)
sonucu ilk satır return yaparken node bu sefer işaret ediyordu. Hem ekleme (add) hem de silme
Anna’dır. Çünkü onun next’i Paul if’in için node (remove) işlemi cursor->next ile yapılıyordu. Yani
olarak gider ve onun da next’i trailer olduğundan cursor’ın peşine ekleniyor veya peşine gelen
return yapılır. Sondan başa listelendiğinden siliniyordu. Bu bilgiler ışığında :
Anna’nın peşine de Rose yazılır.
Kuyruk veri yapısında veri ekleme (enqueue) kuyruk
sonuna yapıldığından dairesel bağlı listenin add
fonksiyonunun peşine, cursor yeni eklenene son
7 5 4 3 2 1 6 eleman olarak işaret etsin diye advance de
2.Yukarıdaki verileri splay ağacına yerleştiriniz? (25P) çağrılmıştır.

Bu sorunun cevabı 2. Sayfadadır | Kuyruk veri yapısında veri silme (dequeue) kuyruk
v başından yapıldığından dairesel bağlı listenin
remove fonksiyonu ile birebir örtüşür. Çünkü
dairesel listede de cursor->next yani ilk eleman
silinmektedir.
2. Sorunun Cevabı :

7 5 4 3

5 4 7 3 5 2 4

7 5

7
2 1 1

1 3 2 2

4 3 3

5 4 4

7 5 5

7 6

6 7

1 1 1

2 2 2

3 4 6

4 3 6 4 7

6 5 7 3 5

5 7

2 6

1 6 2 7

4 7 1 4

3 5 3 5
Karadeniz Teknik Üniversitesi BIL 205 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Arasınav, 13.11.2014, 10:00, D-2, D-9
Öğr.Gör. Ömer ÇAKIR Süre : 100 Dakika

A GRUBU - CEVAPLAR

DoublyLinkedList* fList(DoublyLinkedList* list1) int biC(int n, int k)


{ {
DoublyLinkedList* list2 = new DoublyLinkedList(); if (k == 0) return 1;
DoublyNode* nodeA = NULL; if (k == n) return 1;
DoublyNode* nodeB = NULL; return biC(n - 1, k-1) + biC(n - 1, k);
}
while (!list1->empty())
{ void main()
nodeA = list1->header->next; {
nodeB = list1->header->next->next; for (int n = 0; n < 5; n++)
{
while (nodeB != list1->trailer) for (int k = 0; k <= n; k++)
{ {
if (nodeB->score < nodeA->score) cout << biC(n, k) <<" ";
{ }
nodeA = nodeB;
nodeB = nodeB->next; cout << endl;
} }
else }
nodeB = nodeB->next;
}

list2->addBack(nodeA->elem, nodeA->score); 2. Yukarıdaki programın çıktısı nedir? (30P)


list1->remove(nodeA);
}

return list2;
}

void main()
{
DoublyLinkedList* list1 = new DoublyLinkedList();
list1->addFront("Paul", 720);
list1->addFront("Rose", 590);
list1->addFront("Jack", 510);
list1->addFront("Anna", 660);
list1->addFront("Rob", 750);

DoublyLinkedList* list2 = fList(list1);


list2->printH2T();
}

1. fList() fonksiyonu ne iş yapar? Kısaca açıklayınız.(30P)

list1’in elemanlarını score değerlerine göre


küçükten büyüğe sırala olarak list2’ye ekler.

İçteki while() döngüsü ile list1’in min score


değerine sahip düğümü bulunur, addBack() ile
list2’ye eklenip remove() ile list1’den
silinir. Bu işlem dıştaki while döngüsündeki
(!list1->empty()) = true olduğu müddetçe yani
list1 empty olana dek tekrarlanır.
ii) (10P) (Yanlış cevaptan 5P kırılacaktır)
bool empty()
{
return (header->next == trailer); u->next = v;
} v->prev->next = u;
u->prev = v->prev;
void addFront(const string& e, const int& i) v->prev = u;
{
add(header->next, e, i); olduğunda printH2T() fonksiyonu :
}
(A) Liste elemanlarını yazar.
void add(DoublyNode* v, string& e, int& i) (B) "List is empty !" yazar.
{ (C) Sonsuz döngüye girer.
DoublyNode* u = new DoublyNode;
u->elem = e;
u->score = i; 720 750
.....
.....
.....
Header Trailer
.....
}

void printH2T() iii) (10P) (Yanlış cevaptan 5P kırılacaktır)


{
if (empty()) u->next = v;
{
v->prev->next = u;
cout << "List is empty !" << endl;
return; v->prev = u;
} u->prev = v->prev;

DoublyNode* first = header; olduğunda printH2T() fonksiyonu :


while (!(first->next == trailer)) (A) Liste elemanlarını yazar.
{
(B) "List is empty !" yazar.
cout << first->next->elem <<
"\t" << first->next->score << endl; (C) Sonsuz döngüye girer.
first = first->next;
}
}

void main()
{
DoublyLinkedList list;
720 750
list.addFront("Rob", 750);
list.addFront("Paul", 720);
list.printH2T(); Header Trailer
}

3. Yukarıdaki programda add() fonksiyonunda ..... ile


iv) (10P) (Yanlış cevaptan 5P kırılacaktır)
temsil edilen satırlar:
u->next = v;
i) (10P) (Yanlış cevaptan 5P kırılacaktır)
v->prev = u;
u->next = v; u->prev = v->prev;
u->prev = v->prev; v->prev->next = u;
v->prev = u;
v->prev->next = u; olduğunda printH2T() fonksiyonu :
(A) Liste elemanlarını yazar.
olduğunda printH2T() fonksiyonu :
(B) "List is empty !" yazar.
(A) Liste elemanlarını yazar.
(C) Sonsuz döngüye girer.
(B) "List is empty !" yazar.
(C) Sonsuz döngüye girer.

750 720 750 720

Header Trailer Header Trailer


Karadeniz Teknik Üniversitesi BIL 205 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Bütünleme Sınavı, 30.01.2014, 10:00, D-2
Öğr.Gör. Ömer ÇAKIR Süre : 90 Dakika

CEVAPLAR

1 2 3 4 5 6 7
Çıktı
void right(int i, int p, int n, int k, int s)
{ 2. Yukarıdaki verileri aşağıdaki koda göre Heap’e ekleyiniz.
s += i; 8 İpucu  root, min yerine max elemandır. (25P)
if(n == k)
{ 16
bool isLess(const int& e, const int& f)
cout << s << endl; 32 {
return;
64 if(e<f) return true; else return false;
}
else right(i+p, p, n+1, k, s);
}
}
void insert(const int& e)
void down(int i, int p, int n, int k) {
{ T.addLast(e);
if(n == k) cout << i << endl; Position v = T.last();
else right(i, p, 1, k, 0); while (!T.isRoot(v))
{
if(i == 1) return; Position u = T.parent(v);
else down(i/2, p/2, 1, k*2); if (isLess(*v, *u)) break;
} T.swap(v, u);
v = u;
void main() }
{ }
down(8, 16, 1, 1);
}

1. Yukarıdaki programın çıktısı nedir? (25P) 1 2 3


2 1 3 1 2

4 5
3 2 4 2

1 5 1 3 6

6 7
4 5 4 6

1 3 2 7 1 3 2 5
2 4 6 1 3 5
4
3. Yukarıdaki verileri Splay Ağacı’na ekleyiniz. (25P)

2 4 6
2 6
4 2 6 4
2
1 3 5 7 8 9
1
4. Yukarıdaki 2-3-4 Ağacı’ndan 5’i siliniz. (25P)
6 6 1
2 1 6 2 4 6

1 4 2 2
4 4
1 3 5 7 8 9
3

1 1 1 2 4 7
6 6 3
2 3 2 6
1 3 6 8 9
3 2 4 4
4

3 3

1 6 1 6

2 4 2 5

5 4

3 5
1 5 3 6

2 4 6 1 4
2
Karadeniz Teknik Üniversitesi BIL 205 Veri Yapıları
Bilgisayar Mühendisliği Bölümü 1. Arasınav, 19.11.2013, 13:00, D-2, D-9
Öğr.Gör. Ömer ÇAKIR Süre : 90 Dakika

CEVAPLAR

Çıktı
void print1(DoublyNode* node) void quadruple(int A[], int i, int n)
{
6
{
cout << node->elem << node->score << endl; if (n == 1) cout << A[i] << endl; 5
else 8
if (node->next == trailer) return; { 7
quadruple( A, i + n/4, n/4 );
quadruple( A, i , n/4 );
2
print1(node->next);
} quadruple( A, i + 3*n/4, n/4 ); 1
quadruple( A, i + 2*n/4, n/4 ); 4
void print2(DoublyNode* node) } 3
{ }
if (node == trailer) return;
14
void main() 13
cout << node->elem << node->score << endl; { 16
int A[16]={1,2,3,4,5,6,7,8, 15
print2(node->next); 9,10,11,12,13,14,15,16};
}
10
quadruple(A, 0, 16); 9
void main() } 12
{ 11
DoublyLinkedList list;
2. Yukarıdaki programın çıktısı nedir? (30P)
list.insertOrdered("Paul", 720); //küçükten
list.insertOrdered("Rose", 590); //büyüğe
list.insertOrdered("Anna", 660); //sıralı ekle

list.print1(list.header->next);
list.print2(list.header->next);
}

1.
a) Yukarıdaki print1() ve print2() fonksiyonlarının
çıktıları nelerdir? (20P)

print1() print2()

Rose 590 Rose 590


Anna 660 Anna 660
Paul 720 Paul 720

b) print1() ve print2() kendilerini recursive olarak kaç


kez çağırırlar? (10P)

print1() kendini recursive olarak 2 kez çağırır.

print2() kendini recursive olarak 3 kez çağırır.


3. Yandaki programın çıktısı nedir? (20P)
SinglyNode* SinglyLinkedList::funcA(SinglyNode* node)
{
if(node->next == NULL) return node; Mike 1105
else funcA(node->next);
} Rob 750

void SinglyLinkedList::funcB(SinglyNode* node)


Paul 720
{ Anna 660
if(node->next == NULL)
{ Rose 590
delete head;
head = NULL; Jack 510
return;
}
funcA ne iş yapar? (1 cümle ile açıklayınız) (5P)
if (node->next->next == NULL)
{ Listenin son elemanını döndürür.
delete node->next;
node->next = NULL;
return;
} funcB ne iş yapar? (1 cümle ile açıklayınız) (5P)

funcB(node->next);
Listenin son elemanını siler.
}

SinglyLinkedList* SinglyLinkedList::funcC()
{ funcC ne iş yapar? (1 cümle ile açıklayınız) (10P)
SinglyLinkedList* newList = new SinglyLinkedList();

SinglyNode* node = funcA(head); Listeyi reverse yapar.


newList->head = new SinglyNode();
newList->head->elem = node->elem;
newList->head->score = node->score;
SinglyNode* tempHead = newList->head;
funcB(head);

while(head != NULL)
{
node = funcA(head);
tempHead->next = new SinglyNode();
tempHead->next->elem = node->elem;
tempHead->next->score = node->score;
tempHead = tempHead->next;
funcB(head);
}
tempHead->next = NULL;

return newList;
}

void main()
{
SinglyLinkedList* list = new SinglyLinkedList();

list->insertOrdered("Mike", 1105);
list->insertOrdered("Rob", 750);
list->insertOrdered("Paul", 720);
list->insertOrdered("Anna", 660);
list->insertOrdered("Rose", 590);
list->insertOrdered("Jack", 510);

SinglyLinkedList* newList = list->funcC();


newList->print();

::getchar();
}
Karadeniz Teknik Üniversitesi BIL 205 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Final Sınavı, 02.01.2015, 15:00, D-2, D-5
Öğr.Gör. Ömer ÇAKIR Süre : 90 Dakika
A GRUBU CEVAPLAR

int Hash (char* key) dictionary.txt


{ array dizi
int sum = 0; binary ikili
for (int j=0; j<4; j += 2) child cocuk
sum += 3*key[j] + key[j+1]; circuit devre
class sinif
sum = sum % 11 ; client istemci
return sum; gate kapi
} root kok

2. Yukarıda dictionary.txt’de verilen kelimeleri Hash()


1. Yukarıdaki splay ağacına 11’i ekleyiniz. (30P) fonksiyonunu ve çakışma çözümleme yöntemi olarak linear
7
probing’i kullanarak relative.txt’ye yazınız. Ayrıca
synonym chaining yöntemine göre bağlı listelere ilgili
1 13
kayıtları ekleyiniz. (30P)

relative.txt a-97 n-110


5 9
0 root kok b-98 o-111
1 binary ikili c-99 p-112
2 6 8 11
2 d-100 q-113
3 e-101 r-114
4 10 12 4 f-102 s-115
5 g-103 t-116
7 6 h-104 u-117
7 circuit devre i-105 v-118
1 13 8 array dizi j-106 w-119
9 k-107 x-120
5 11
9 10 child cocuk l-108 y-121
ASCII Tablo  m-109 z-122
2 6 8
9 11
12

0
4 10
8 12
10

1
7
2
1 13
11
3
5 9 11
13
4
2 6 10
8 10 12
5
4
6
11
7
7 client
1
7 13
8 class gate
1
2 5
9 12
9
9
5 10
8 10
10
10
2 6

4
bool empty() ii) (20P) (Yanlış cevaptan 5P kırılacaktır)
{
return (header->next == trailer);
} v->prev->next = u;
v->prev = u;
void addFront(const int& i) u->next = v;
{ u->prev = v->prev;
add(header->next, i);
}
olduğunda listenin son hali :
void add(DoublyNode* v, int& i)
{ (A)
DoublyNode* u = new DoublyNode;
u->score = i;
..... 750 720
.....
.....
Header Trailer
.....
} (B)
720 750
void main()
{
DoublyLinkedList list; Header Trailer
list.addFront(750); (C)
list.addFront(720);
}
750 720

3. Yukarıdaki programda add() fonksiyonunda ..... ile Header Trailer


temsil edilen satırlar: (D)

i) (20P) (Yanlış cevaptan 5P kırılacaktır)


720 750
v->prev = u;
u->prev = v->prev; Header Trailer
v->prev->next = u; (E)
u->next = v;

750 720
olduğunda listenin son hali :

Header Trailer
(A)

750 720

Header Trailer

(B)
720 750

Header Trailer
(C)

750 720

Header Trailer

(D)

720 750

Header Trailer

(E)

750 720

Header Trailer
Karadeniz Teknik Üniversitesi BIL 205 Veri Yapıları
Bilgisayar Mühendisliği Bölümü Final Sınavı, 06.01.2014, 15:00, D-2, D-9
Öğr.Gör. Ömer ÇAKIR Süre : 90 Dakika

CEVAPLAR

Çıktı
void right(int i, int p, int n, int k)
8 7 6 5
{
cout << i << endl; 4
12 6 7 5 7 6
if(n == k) return;
else right(i+p, p, n+1, k); 2
} 6 4
void down(int i, int p, int n, int k)
10
{ 14 4 3
if(n == k) cout << i << endl; 1
else right(i, p, 1, k);
3 4 6
if(i == 1) return; 5
5 6
else down(i/2, p/2, 1, k*2);
7
}
9 7 3 7 5 2
void main() 11
{
down(8, 16, 1, 1); 13 2 1
} 15
4 3 4 2
1. Yukarıdaki programın çıktısı nedir? (25P)

7 5 6 1 7 5 6 3

7 6 5 4 3 2 1

2. Yukarıdaki verileri Heap’e ekleyiniz. (25P)


2 3 4
3 2 4 3 5 1 2 3

2
5 6 7 2
4 6 5 7 6
3 4 5
2 3 1 3 4 5
4
2 3
2 2 4
1

7 7
6 6 1 3 5 6 7

5 5

4 4 2 4 6
2 1
1 3 2
3 1 3 5 7 8

7 7
6 6 4

4 1
1 5 4
2 6
2 2 5
3 3

6 1 1 3 5 7 8 9
1 7 6
1 2 3 4 5 6 7 8 9
4 4 7
4. Yukarıdaki verileri 2-3-4 Ağacı’na ekleyiniz. (25P)
2 5 2 5
3 3

2 3 4 5 6 7 1

3. Yukarıdaki verileri Splay Ağacı’na ekleyiniz. (25P)

You might also like