Week 7
Düğüm bulma
Tekli bağlı liste: pHead ve pTail Dairesel bağlı liste
Çift bağlı liste
Düğüm bulma
While kullanarak Loop kullanarak
Düğüm bulma: While döngüsü ile
Node* temp;
temp=pHead;
while (temp->data!=Xvalue) while (temp->data!=Xvalue)
temp=temp->next;
=========================================
Node* temp;
temp=pHead;
while (temp!=NULL && temp->data!=Xvalue) temp=temp->next;
Aranan eleman listede varken
Düğüm bulma: for döngüsü ile
for (Node* temp=pHead;temp->data!=Xvalue; temp=temp->next)
;
3. Tekli Bağlı Liste: pHead ve pTail
Listeyi pHead ile yönetmekle aynıdır
Dikkatli olunması gereken: pTail değerinin değişme durumları
değişme durumları
– Sona yeni bir düğüm ekleme (insert değil add)
– Sondan bir düğüm silme
3. Tekli Bağlı Liste: pHead ve pTail
pTail ne zaman değişir?
– Liste başına bir düğüm eklenince
pTail=NULL // Liste boşken pHead =
data Link
pTail=NULL // Liste boşken pHead =
pHead= pTail // listede bir eleman varken
data Link data Link
pHead pTail
Yeni bir eleman eklenince
3. Tekli Bağlı Liste: pHead ve pTail
pTail ne zaman değişir?
– Sona bir düğüm eklendiği zaman
pTail=NULL pHead =
data Link
pTail=NULL pHead =
pHead= pTail
pHead pTail
3. Tekli Bağlı Liste: pHead ve pTail
pTail ne zaman değişir?
– Bir düğümden sonra bir başka düğüm eklenince
pTail=NULL pHead =
data Link
pTail=NULL pHead =
pHead= pTail
data Link data Link
pHead pTail
data Link
3. Tekli Bağlı Liste: pHead ve pTail
pTail ne zaman değişir?
– Düğüm silince
pTail=NULL pHead =
data Link
pTail=NULL pHead =
pHead= pTail
pHead pTail
4. Dairesel bağlı liste
Dairesel
– Son düğüm ilk düğümü işaret eder Daire gibi çizilir
– Daire gibi çizilir
Dairesel bağlı liste kullanıldığında
– Listedeki her düğüm aynı pozisyondadır
– Head ve Tail ihtiyacı yoktur
4. Dairesel bağlı liste
Dairesel bağlı listenin kontrolü: düğüm ekle
pHead =NULL
data Link
pHead
pHead
4. Dairesel bağlı liste
Dairesel bağlı liste kontrolü : ekleme adımları
data Link data Link
pHead
data Link data Link data Link data Link data Link
data Link data Link data Link data Link
data Link data Link data Link data Link
4. Dairesel bağlı liste
Dairesel bağlı liste kontrolü: düğüm sil
pHead =NULL
data Link
pHead
pHead
4. Dairesel bağlı liste
Örnek:
– Bir düğümü silecek fonksiyonu yazınız
pHead ve pTail kullanarak dairesel bağlı liste
– pHead ve pTail kullanarak dairesel bağlı liste yapınız.
4. Çift bağlı liste
Struct Node {
Int data;
Node *next;
Node * pre;
};
4. Çift bağlı liste
Yeni düğüm ekleme
– Başa, sona, bir düğümden sonraya
Düğüm silme Düğüm silme
– Baştan, sondan, ortadan
4. Çift bağlı liste
Yeni düğüm ekle: bir düğümden sonra
data data
data
data data
data
data data
data data
data
4. Double Linked List
Remove node: steps
data data
data data
data data
data data
data data
data data
4. Çift bağlı liste
Örnek
– İlk düğümü silmek için bir fonksiyon yazın (pHead)
(pHead)
– Bir düğümden sonraki düğümü silmek için bir fonksiyon yazınız
Week 8
Alıştırmalar
Tekrar : dosyalar Tekrar : dosyalar Tekrar : string
Alıştırmalar
C/C++ programlama tekrarı
1. stringlerle çalışma
2. dosyalarla çalışma : dosya okuma/yazma 3. alıştırma 6
1. String: yapısı
String
– Karakterlerin dizisidir
Null (\0) karakteri ile sonlanır
– Null (\0) karakteri ile sonlanır
– Metin sonuna string karakteri C ve C++’da otomatik olarak eklenir.
1. String: tanımlama
String tanımlama
– Karakter dizisizi kullanarak
char str[] = {‘H’,’e’,’l’,’l’,’o’,’\0’}; //null ile birlikte tanımla char str[] = {‘H’,’e’,’l’,’l’,’o’,’\0’}; //null ile birlikte tanımla char str[] = “Hello”; //null olmadan tanımla
– Karakter pointer kullanarak
char *str = “Hello”;
1. String: giriş
char *gets(char *s);
– Her bir karakteri oku
Enter tuşuna gelene kadar
– Enter tuşuna gelene kadar
– Metin sonuna otomatik olarak ‘\0’ ekle
cin>>s;
1. String: çıkış
int puts(const char *s);
cout<<s;
1. String: tampon problemi?
Keyboard buffer
char szKey[] = "aaa";
char s[10];
char s[10];
do {
cout<<“ bir metin gir…";
gets(s);
} while (strcmp (szKey,s) != 0);
puts ("OK. corect");
Eğer kullanıcı “aaaaaaaaaaaaa” metni girerse???
1. String: functions
#include <string.h>
strcpy(s1, s2) strcat(s1, s2) strlen(s1)
strcmp(s1, s2) -> (-1,0,1) strchr(s1, ch)
strstr(s1, s2)
1. String: function examples
char s1[80], s2[80];
cout << "Input the first string: :";
gets(s1);
cout << "Input the second string: ";
gets(s2);
cout << "Length of s1= " << strlen(s1);
cout << "Length of s2= " << strlen(s2);
if(!strcmp(s1, s2)) if(!strcmp(s1, s2))
cout << "These strings are equal\n";
strcat(s1, s2);
cout << "s1 + s2: " << s1 << endl;;
strcpy(s1, "This is a test.\n");
cout << s1;
if(strchr(s1, 'e')) cout << "e is in " << s1;
if(strstr(s2, "hi")) cout << "found hi in " <<s2;
2. File: yeni bir dosya oluşturma
#include <io.h>
FILE *fp;
fp=fopen(“d:\\test.txt", "wb"))
fwrite(&Address, sizeof(TYPE), count, fp);
fclose(fp);
2.File: yeni bir dosya oluşturma
int Arr[3]
Arr
Fwrite(Arr, sizeof(int), 1, fp);
fwrite(Arr, sizeof(Arr), 1, fp);
Fwrite(&Arr[i], sizeof(int), 1, fp);
for (i=0;i<=3;i++)
2. File: Reading a file
#include <io.h>
FILE *fp;
fp=fopen(“d:\\test.txt", “rb")) fp=fopen(“d:\\test.txt", “rb"))
while (fwrite(&Address, sizeof(TYPE), count, fp)) {
– ……….
}
fclose(fp);
3.Excercises
Exercise 6