Linked List kullanarak 1’den 10’a kadar ekrana yazma

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

typedef struct linked_list {
int number;
struct linked_list *next;
} node;

int main(void)
{
int i=0;
//listemizi root adindan olusturduk ve memory'den yer aldik.
//(memory allocation)
node * root= (node *) malloc(sizeof(node));
//root'un adresini temp adindan baska bir node tipinde degiskene
//veriyoruz ve boylelikle root'un adresinden baslayarak memory'de
//binding islemleri yapabilecegiz.
node * temp = root;

//root adresinden baslayarak binding islemleri yapiyoruz.
for( i=0;i<=10;i++)
{
temp->number=i;
temp->next=(node *) malloc(sizeof(node));
temp=temp->next;
}
//son eleman null yapilir ki nodeun bittigi anlasilsin.
temp->next = NULL;
//root icindekileri temp'e set ettik.
temp = root;
//ekrana yazdiriyoruz.
while(temp->next != NULL)
{
printf("%d\n",temp->number);
temp=temp->next;
}

getch();
return 0;
}
C, Genel kategorisine gönderildi | , ile etiketlendi | Yorum bırakın

Linked List

Bu yazıda basitçe linked list yapısından bahsedeceğim.

Linked List adından da anlaşılacağı gibi bağlı listedir. Yani bir listede hem data tutulur hem de bir sonraki adresi gösteren pointer tutulur. Böylelikle memory’de farklı birbirinden alakasız adreslerde bulunan liste elemanlarını sanki art arda geliyormuş gibi listemizde tutarız.

Avantajları

-Dinamik bir veri yapısı vardır, run time’da allocation ve deallocation imkanı sunarak memory’yi verimli kullanmaya olanak sağlar.

-insertion(ekleme) ve deletion(silme) işlemleri node’ları(düğüm) birbirine bağlayarak kolayca halledilir.

-stack ve queue yapılarını implement etmek kolaydır ve sıkça da kullanılır.

– insertion(ekleme) ve deletion(silme) işlemleri için node’lar birbirine bağlandığından çalışma süresi O(1)’dir.

Dezavantajları

-Ekstradan bir de pointer tuttuklarından fazla yer kaplarlar.

-Liste içinde ilk elemandan son elemana sırayla erişebildiğimizden dolayı bir elemana erişmek için çalışma zamanı O(n)’dir. Array’lerde O(1)’ir.

-Singly Linked List geriye gitmek zordur, 4-5 adımlık işlemler gerekmektedir, doubly  linked list kullanılabilir ancak onun için de bir önceki adresi gösteren pointer eklemek gerekir. Yani linked list için geri gitmek çalışma zamanını ve maliyeti artırır.

Ön bilgi için bu yazı işinize yarayabilir ancak linked list yapısını gerçekten anlamak için iyi bir veri yapıları kitabından çalışmanızı tavsiye ederim.

 

C, Genel kategorisine gönderildi | , , ile etiketlendi | Yorum bırakın

Girilen Sayıları Sıralayan Program

Aşağıdaki program -kullanıcı sıfır girene kadar arada bir boşluk bırakarak ayıları giriyor- sayıları sıralıyor.

#include<stdio.h>
#include<conio.h>

#define SIZE 80

void
sort(double array[],int i);

int
main(void)
{
double array[SIZE];
int i = -1,
j;

printf("Sayilari giriniz ve sifira basiniz.\n");
do{
++i;
scanf("%lf",&array[i]);
}while(array[i] != 0);

sort(array,i);

for(j=1; j<=i; ++j)
printf("%f\n",array[j]);

getch();
return (0);
}

void
sort(double array[],int i)
{
int k,j,
temp;

for(k=0; k<i; ++k)
{
for(j=k+1; j<=i; ++j)
{
if(array[k] > array[j])
{
temp = array[k];
array[k] = array[j];
array[j] = temp;
}
}
}
}
C, Genel kategorisine gönderildi | , , , , ile etiketlendi | Yorum bırakın

Hesap Makinesi

Henüz if condition yapilarini göstermediğimden dolayı kontrol yapamıyoruz.
Burada kullancıya sıfırdan farklı değer gir demek yerine kullanıcı sıfır
girdiğinde uyarı verip tekrardan bir değer girmesini isteyebiliriz.
Onlara da geleceğiz… 😉

#include<stdio.h>
#include<conio.h>

int
main(void)
{
double firstNumber,
secondNumber,
sum,
division,
substract,
multiply;

printf("Sifirdan farkli bir sayi giriniz.\n");
scanf("%lf",&firstNumber);
printf("Sifirdan farkli bir sayi daha giriniz.\n");
scanf("%lf",&secondNumber);

sum = firstNumber + secondNumber;
printf("%f + %f = %f\n",firstNumber,secondNumber,sum);
substract = firstNumber - secondNumber;
printf("%f - %f = %f\n",firstNumber,secondNumber,substract);
division = firstNumber / secondNumber;
printf("%f / %f = %f\n",firstNumber,secondNumber,division);
multiply = firstNumber * secondNumber;
printf("%f * %f = %f\n",firstNumber,secondNumber,multiply);

getch();
return (0);
}
C, Genel kategorisine gönderildi | , , , ile etiketlendi | Yorum bırakın

file system(dosyalama)

Verileri disk üzerinde saklayabilmek ve daha sonra bu verilere ulaşabilmek için dosyalama yöntemini kullanırız.

Bu yöntemle istediğimiz dosyanın istediğimiz yerine yazıp aynı şekilde dosyanın istediğimiz bölümünü de okuyabiliriz.

Verilerimizi kaydedeceğimiz iki dosya tipi vardır. (.txt ve .bin)

.txt uzantılı dosyada sakladığımız verileri görebeiliriz ancak .bin uzantılı dosyada sakladığımız verileri aynı haliyle göremeyiz çünkü verileri binary şekilde saklar.

Dosyalama yönteminde dosya açmanın çeşitli modları vardır:

Okumaya devam et

C, Genel kategorisine gönderildi | , , , , ile etiketlendi | Yorum bırakın

string

Dizilerin aynısıdır. Ama harf ve semboller de ekleyebiliriz. Karakter bazlıdır.

Stringin sonunda ” (NULL) işareti olur ve bu artık string bitti anlamına gelir.

Örnek olarak;

Bu program string’de ki ‘a’ların sayısını buluyor.

#include<stdio.h>
#include<conio.h>

int
foundA(char string[],int i);

int
main(void)
{
char string[] = "Ali ata bak.";
int counter=0,
i,stringSize=11;

for(stringSize=0; string[stringSize]!=''; ++stringSize);

for(i=0; i<stringSize; ++i)
{
if(foundA(string,i))
counter +=1;
}

printf("Toplam 'a' harfi sayisi: %d",counter);

getch();
return (0);
}

int
foundA(char string[],int i)
{
if(string[i] == 'a')
return (1);

return (0);
}
C, Genel kategorisine gönderildi | , , , , ile etiketlendi | Yorum bırakın

array

Array’in kelime karşılığı dizidir. Eğer aynı tür elemanlar ile çalışıyorsak dizileri kullanmamız çok yararlı olacaktır. Aklınıza “Bu birden fazla elemanları nasıl birbirinden ayırt edeceğiz?” diye bir soru gelebilir, bir dizinin her elemanının farklı indisi vardır. İndis’in de kelime karşılığı sıra numarasıdır.Bir diziye uzunluğu kadar eleman koyabiliriz.

int array1[5] = {3,5,2,60,12};

Yukarıdaki dizi en fazla beş eleman alabilir. Aynı zamanda beşten daha az eleman da alabilir.

Bu array’in birinci elemanı

Okumaya devam et

C, Genel kategorisine gönderildi | , , , ile etiketlendi | Yorum bırakın

Fonksiyonlar

Fonksiyonlar programların okunabilirliğini arttırırlar. Eğer biz hiç fonksiyon kullanmazsak bütün işlemleri main fonksiyonunda yaparız ve main fonksiyonu alabildiğine uzar gider. Buna çözüm olarak mainden başka yerde fonksiyon yazarak main fonksiyonunun görünümünü daha okunaklı hale getirebiliriz. Aynı zamanda böylelikle programın ne yaptığını anlaması da daha rahat olacaktır.

Yazılan fonksiyonlar mainden sonrayani main fonksiyonunun altına yazılacaksa , yukarıda yani main fonksiyonundan önce o fonksiyonların prototype’leri olmalıdır. Eğer fonksiyonlar mainden önce yazılıyorsa o zaman zaten fonksiyonlar program tarafından tanınır ve prototype eklemeye gerek kalmayacaktır.

Örnek olarak; Okumaya devam et

C, Genel kategorisine gönderildi | , , , ile etiketlendi | Yorum bırakın

typedef enum

Enum yapıları ile biz kendimiz değişken türü belirleyebiliriz. Ancak bu değişken türünün belirttiği değişkenlerin alacağı değerler sabit olmalıdır. Enum yapısında ne tanımladıysak sadece o değerleri alabilir.

Örnek olarak;

Okumaya devam et

C, Genel kategorisine gönderildi | , , , ile etiketlendi | Yorum bırakın

Döngüler(repetitions-loops)

Döngüler programların olmazsa olmazıdır.
Uzun uzadıya koda yazmak yerine aynı işlemlerin olduğu yere koyduğumuz
döngülerle daha kısa bir şekilde programlarımızı oluşturabiliriz.

C programlama dilinde üç çeşit döngü vardır.

Okumaya devam et

C, Genel kategorisine gönderildi | , , , ile etiketlendi | Yorum bırakın