PROG16
PROG16
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;
}
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);
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;
} }
SinglyLinkedList list2;
list2.addBack(1);
list2.addBack(3);
list2.addBack(5);
list2.addBack(7);
list2.addBack(9);
SinglyLinkedList tekList =
list1.uniLists(list2);
tekList.print();
}
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
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
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 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);
}
6 14 20 22 30 52 72
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;
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);
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
int main()
{
CircularlyLinkedList list;
list.add("Paul", 720);
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
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
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
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;
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
}
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;
Çı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
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
}
}
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;
newNode->next = current->next;
newNode->prev = current;
............... = ...............;
............... = ...............;
}
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))
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
CEVAPLAR
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
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; }
0 1 2 9 3 5 10 13 8 4 6 7 12 11 14 15
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
4 2 1 1 2 3 3 2 4 6 5 5 6 7 7 6 4
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
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
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
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;
current = current->next;
}
if (current->next == NULL)
cout << "\n" << e << " is not found" << endl;
}
(B) cout << i << endl; 4. Yukarıdaki programın çıktısı nedir? (25P)
tree(i / 2, j / 2, p / 2, 1, k * 2);
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);
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
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
while (!list->empty())
{
nodeA = list->header->next;
nodeB = list->header->next->next;
list1->addBack(nodeA->elem, nodeA->score);
list->remove(nodeA);
nodeA = list->header->next;
nodeB = list->header->next->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);
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
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);
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
4 12 24 28
2. a) Yukarıdaki programın çıktısı nedir? (20P)
(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
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
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)
DEĞERLENDİRME
NUMARA : …………………………… AD SOYAD : ………………………………………………….......
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.
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)
}
print1() Print2()
Rose Paul
Anna Anna
Paul Rose
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
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)
CEVAPLAR
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
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);
void main()
{
DoublyLinkedList list;
720 750
list.addFront("Rob", 750);
list.addFront("Paul", 720);
list.printH2T(); Header Trailer
}
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);
}
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()
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();
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);
::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
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
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
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