IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası

IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası (https://www.ircforumlari.net/)
-   C ve C++ (https://www.ircforumlari.net/c-ve-c/)
-   -   C++’ın nimetlerinden Linked List yaratma (https://www.ircforumlari.net/c-ve-c/454430-c-nimetlerinden-linked-list-yaratma.html)

aSi 19 Şubat 2012 00:01

C++’ın nimetlerinden Linked List yaratma
 
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]

Linked list yani diğer adıyla bağlı listeler C++ dilinde en çok kullanılan veri yapılarından biridir. Özellikle Queue ve Stack yapılarını uygulamaya geçirmek için kullanılır. Buradaki ana nokta yarattığımız node’ları pointerlarla bir sonraki node’a bağlamak ve bu şekilde dinamik olarak listemizin eleman sayısını istediğimiz kadar arttırabilmek. Linked listlerin arraylardan farkı arraylar gibi fix bir boyuta sahip olmamalarıdır bu da bize hem bellekten tasarruf sağlar hem de eleman sayısını bilemediğimiz algoritmaları kurmamızda büyük ölçüde yardım sağlar.

Kod:

#include <iostream>
using namespace std;

class node//ihtiyacımız olan datayı girmek ve link listteki pointerları yaratmak için gerekli olan verilere
  //sahip olan node isimli bir class yarattık.
{
public:
  int veri;
  node *sonraki; //bir sonraki elemanı bağlayacak pointer
};

class liste//listeyi oluşturacak fonksiyonların tanımlandığı list isimli class
{
private:
  node *ilk;//listemizin ilk elemanı için bir pointer tanımladık
public:

  liste()//default constructer'ımızı yarattık.
  {
      ilk=NULL;//first pointerımızı null yaptık ki ilk başta listemiz boş olsun.
  }

  void eleman_ekle(int x)
  {
      node *tmp=new node; //geçici bir tmp pointerı atadık
      tmp->veri=x;  // ekleyecek oldugumuz elemanı geçici pointerımızın datasına gönderdik.
      tmp->sonraki=ilk;// önceden tanımlamış olduğumuz bağlayıcı pointerımızı ilk eklediğimiz
      //elemanın adresine atıyoruz
      ilk=tmp; // son olarak da atadığımız pointerları birbirine eşitliyoruz.
  }

  void eleman_sil(int x)
  {
      node *tmp;//yine gecici bir pointer atadık.
      int sayac=0;
      for(tmp=ilk;tmp!=NULL;tmp=tmp->sonraki) // istediğimiz elemanı silebilmek için tüm listeyi dolaşmamız
      {//için bu for döngüsünü yazdık.
        if(tmp->veri==x)//silmek istediğimiz elemanın listede olma durumu
            sayac++;
      }

      if(sayac!=0) //eğer aradığımız silmek istedğimiz eleman listedeyse
      {
      if(ilk->veri==x)
      {
        tmp=ilk;  //bu iki satırda silme işlemini yapıyoruz.
        ilk=tmp->sonraki;
      }
      else
      {
      for(tmp=ilk;tmp->sonraki->veri!=x;tmp=tmp->sonraki){}
      tmp->sonraki=tmp->sonraki->sonraki;// bu satırda ise 2 satır sonraki elemanın pointerını bir önceki elemanın adresine atıyoruz.
      }
      }
      else
      {
        cout<<"              BULUNAMADI !"<<endl;//elemanın listede olmama durumu.
      }
  }

  void yazdir()
  {
      node *tmp;
      for(tmp=ilk;tmp!=NULL;tmp=tmp->sonraki) //listedeki tüm nodeları dolaşmamızı sağlayan for döngüsü
      {
        cout<<"        _____"<<endl;
        cout<<"      "<<tmp->veri<<endl;//tüm elemanların adresine ulaşma yöntemimiz
      }
  }

  void arama(int x) // arama fonksiyonumuz
  {
      node *tmp;
      int sayac=0;
      for(tmp=ilk;tmp!=NULL;tmp=tmp->sonraki)
      {
        if(tmp->veri==x)//aradığımız eleman listedeyse sayacı 1 arttırıyoruz.
            sayac++;
      }

      if(sayac!=0)//eğer sayaç artmış ise eleman bulunmuştur
      {
        cout<<"Eleman Bulundu.."<<endl;
      }
      else
      {
        cout<<"Eleman listede yok.."<<endl;
      }
  }

};

  int main()
  {
      liste a;// bir obje yaratıyoruz

      a.eleman_ekle(25);//objeleri kullanarak yazdığımız tüm fonksiyonları çağırabiliriz.
      a.eleman_ekle(45);
      a.eleman_ekle(67);
      a.eleman_ekle(13);
      a.eleman_ekle(56);
      a.eleman_ekle(49);
      a.eleman_ekle(35);
      a.eleman_ekle(84);
      a.eleman_sil(84);
      a.arama(84);
      a.yazdir();

      system("pause");
      return 0;
  }





Nickolas 19 Şubat 2012 06:41

Cevap: C++’ın nimetlerinden Linked List yaratma
 
C 'de ve C++ 'da linked listler en temel ihtiyaçlardan biri :) Eline sağlık


Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 00:40.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
Copyright ©2004 - 2025 IRCForumlari.Net Sparhawk