PDA

Tam Sürümünü Görmek İçin : Kuyruk yapısı


aktasm
20/10/2005, 21:09
Merhabalar veri yapılarına ve bugunlerde yığın ve kuyruk yapılarına yenı gırıs yapıyorum fazlaca ornek gormeye basıt programları ıncelemeye ıhtıyacım var eger bana boyle programları nasıl nerden bulabılecegım ornegın bır ınternetsıtesı v.s. yardımcık olursanız cok sevınırım ıcerık ıcın ıstedıgım suan ıcın yıgına kuruga nasıl eleman atarım cekerımlerden baslıyorum
eger kendınızde ornek kodlar yada anlatımlarla bana yardımcı olmaya calısırsanız adeta mınnettar olurum..
:confused:

bende buraya kuyruk yapısında denedıgım bır programı yazıcam sadece amacım bazı sayıları almak ve yazmaktı fakat kuyruk fonksıyonlarım dogru gıbı gozuksede maınımde falan bır sorun warkı nasıl cozulecegı konusunda acıl yardımınızı beklıuyorum
cok tesekkur ederım
Saygılar..


aktasm
20/10/2005, 21:10
/*KUYRUK TANIMLAMA FONKSIYONLARININ KULLANIMI*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#define MAX_KUYRUK 100

using namespace std;

typedef char v_tipi;

typedef struct kuyruk_yapisi{
int bas;
int son;
int sayac;//kuyrugun boyutunu tutar hangı eleman uzerındeyım onu gosterır
v_tipi kuyruk[MAX_KUYRUK];
}k_tipi;

typedef int v2_tipi;

typedef enum boolean{TRUE,FALSE}bool_tipi;

void baslangic(k_tipi *kptr)
{
kptr->bas=0;
kptr->son=-1;
kptr->sayac=0;
}

void k_ekle(v_tipi veri,k_tipi *kptr)
{
if(kptr->sayac==MAX_KUYRUK)
cout<<"HATA:KUYRUK DOLU!!\n";
else
kptr->son=(kptr->son+1)%MAX_KUYRUK;
kptr->kuyruk[kptr->son]=veri;
kptr->sayac++;
}


void k_cikart(v_tipi *veri,k_tipi *kptr)
{
if(kptr->sayac==0)
cout<<"HATA:KUYRUK BOMBOS!!\n";
else
*veri=kptr->kuyruk[kptr->bas];
kptr->bas=(kptr->bas+1)%MAX_KUYRUK;
kptr->sayac--;
}

bool bosmu(k_tipi *kptr)
{
return
(kptr->sayac==0);
}


bool dolumu(k_tipi *kptr)
{
return (kptr->sayac==MAX_KUYRUK);
}

int kuyruk_boyutu(k_tipi *kptr)
{
return (kptr->sayac);
}

int main()
{
k_tipi benim_yigin;
k_tipi *kptr=&benim_yigin;
char deger;

do{

cout<<"ENTER WHAT U WANA DO\t ENTER Q TO QUIT\n!!!";
cin>>deger;
baslangic(kptr);

switch(deger)
{
int i;

case '+':
k_ekle(deger,kptr);
break;
case'-':
k_cikart(&deger,kptr);
putc(deger,stdout);
printf("\n");
break;
case'y':
for(i=1;i<kptr->sayac;i++)
printf("%d\n",kptr->kuyruk[i]);
break;
default:
cout<<"wrong entry!!!\n";

}

}while(deger!=('q'||'Q'));


return 0;
}

aktasm
20/10/2005, 23:27
ayrıkca izninzle bırsey daha sormak ıkstıyorum
kuyruga ekleme fonsıyonunda


void k_cikar(v_tipi *veri,k_tipi *kptr)
{
if(kptr->sayac==0)
hata("YIGIN BOS!!!\n");
else
{
strcpy(veri,kptr->kuyruk[kptr->bas].bilgi);
kptr->kuyruk[kptr->bas].bilgi=(kptr->kuyruk[kptr->bas].bilgi+1)%boyut;
kptr->sayac--;
}
}


yapıyorum
kuyrugun basını 1 kaydrmak ıcın ızledıgım yontem farklı olmalık heralde hatam var orada zaten char degerı cevrımlı yapmak ıcın %li yapma sacma olsa gerek
yardımcı olrsanız sevıknırım.. tesekkurler..

acehreli
21/10/2005, 01:32
1) C++'ta zaten bool diye bir tur var; ve sen de kullaniyorsun. :) O bool_tipi'ni kaldir.

2) sayac'ta bir karisiklik var. Hem boyutunu gostermek hem de hangi elemanda oldugumuzu gostermek isleri karistirmis. Kuyrukta 1 eleman oldugu durumda

for(i=1;i<kptr->sayac;i++)

yazdigin yerde sayac==1 oldugunda o dongu icerigi calistirilmaz.

3) k_ekle (ve k_cikart) icindeki else blogunu {} parantezleri icine almamissin. Cok guvenilir bir kural olarak, tek satir bile olsa, her blogu {} karakterleri icine alma aliskanligi edin.

Her islevin tek bir return satiri icermesi gibi genel bir kural vardir. Baska bazi programcilar gibi, ben de bu kuralin kodu gereksizce guclestirdigini ve karmasiklastirdigini dusunuyorum.

Hata mesajlarini cerr'e gondermek daha gelenekseldir.

Bu uc kurali goz onune alarak k_ekle islevini soyle yazardim:


void k_ekle(v_tipi veri,k_tipi *kptr)
{
if(kptr->sayac==MAX_KUYRUK)
{
cerr<<"HATA:KUYRUK DOLU!!\n";
return;
}

kptr->son=(kptr->son+1)%MAX_KUYRUK;
kptr->kuyruk[kptr->son]=veri;
kptr->sayac++;
}


Yani isleve girer girmez durum kontrol ediliyor; hatali durumda hemen cikiliyor. Eger durum iyiyse ise devam ediyoruz...

4) Ilgisiz olarak, "want to"nun kisasi olarak "wanna" gordum ama "wana" gormedim :)

Ali

burakco
22/10/2005, 03:47
slm beyler,c ye yeni başlamış şu gariban kardeşinize kuyruk yapısı nedir ne işe yarar kısaca açıklayabilir misiniz?

myavuzselim
22/10/2005, 07:00
Bildigin kuyruk: once siranin en onundekinin isi gorulup gonderilir, yeni gelen talihsiz kisi siranin en arkasinda bekler. Bir de bunun priorityqueue diye bir benzeri vardir ki, orada isler torpille isler :) (not: tabi bunun queue ile ilgisi yok. Benzetme komik geldi, dayanamadim. Bos yere kafani karistirmis olmayayim :))
Bilgisayar dilinde de kuyruk cikarttigin elemanin en bastan cikarildigi, ekledigin elemanin da en sona eklendigi bir veri yapisidir.