Giter VIP home page Giter VIP logo

data_structures's Introduction

VERİ YAPILARI(DATA STRUCTURES)


İçindekiler

  1. Ön söz
    1. Kullanınlan Araçlar ve Ortam
  2. Veri Yapıları Nedir?
    1. Algoritma Analizi
  3. Bağlı Liste(Linked List)
    1. Tek Yönlü Bağlı Liste(Singly Linked List)
    2. Çift Yönlü Bağlı Liste(Doubly Linked List)
    3. Dairesel Bağlı Liste(Circular Linked List)
  4. Dizi(Array)
  5. Vektör(Vector)
  6. Yığın(Stack)
  7. Kuyruk(Queue)
  8. Ağaç(Tree)
    1. İkili Arama Ağacı(Binary Search Tree)

1. Ön Söz

Bu belgenin ortaya çıkış amacı, veri yapıları konusundaki birçok belgenin dağınık olması ve çalışmalarım sırasında kullandığım birçok belgenin genel bir bakış kazanmak için yeterince açık olmamasıdır. Bu belge oluşturulurken birçok kaynağa başvurulmuştur ve her bir belge, liste ya da dipnot olarak paylaşılmıştır. Belgeleme çalışmasının yararlı olduğunu düşünüyorum ve öğrendiklerimi başka insanlarla paylaşmak istiyorum. Ancak, belirtmeliyim ki, sunum tamamen şahsi tasavvurumu yansıtmaktadır ve bu yüzden bu belge doğrudan referans olarak kullanılması hedeflenmez. Yanlışlar, eksiklikler veya iyileştirme konularında kendinizi katkı yapmaktan alıkoymayın. Belge, veri yapılarına giriş yapmadan önce ortam kurulumu ve kullanımı hakkında kısa bir rehber içermektedir. Umarım bu belge veri yapılarını keşfetme yolculuğunuzda size yararlı olur. İyi okumalar.


Başlarken

Kullanınlan Araçlar ve Ortam

Başlamadan önce, içerik hazırlanırken kullanlan bazı kaynak ve araçlardan bahsetmeliyim. Her bir yapının gerçeklenmesi(implementation) ve bazı kod parçacıklarının yazımı C++ ile yapılmaktadır. Programdaki bellek tahsisi(allocate), bellek sızıntısı(memory leak) ve ayrıntılı görselleştirimi için valgrind kullanılmaktadır. Testler Linux altında GNU/GCC ile yapılmaktadır, kodlar taşınabilir(portable) olma gayesi taşımaz. Godbolt ile veya yerel ortamda test edebilirsiniz.

  • Linux
  • C++ (C++20)
  • GNU/GCC
  • Valgrind

GNU/GCC

Ubuntu

sudo apt install build-essential
sudo apt-get install valgrind

Arch Linux

sudo pacman -S gcc
sudo pacman -S valgrind

Fedora

sudo dnf install gcc-c++
sudo dnf install valgrind # NOT: dnf ile sorun yaşamanız halinde veritabanını yum ile güncelleniyiz.

Test

/* test.cpp */
#include <iostream>

int main(){
	
	int *p1 = new int; 
	std::cout<<"*p1(sizeof(int)) [Tahsis edildi]\n";
	int *p2 = new int; 
	std::cout<<"*p2(sizeof(int)) [Tahsis edildi]\n";
	
	delete p1; 
	std::cout<<"*p1 [Sisteme geri verildi]\n";
	
	std::cout<<"*p2 artik baska bir bellek adresini gosteriyor ve p2 nin gosterdigi eski adresi kaybettik bkz: MEMORY LEAK\n";
	int foo{1};
	p2 = &foo;
	// artik p2 baska bir bellek adresini gosteriyor ilk tahsis ettigimiz adresi kaybettik.
	// p2 nin gosterdigi alan sisteme geri iade edilmedi bkz: memory leak 
	return 0;
}
Derleme ve Çalıştırma
g++ -o test test.cpp
./test
Çıktı:
*p1(int) [Tahsis edildi]
*p2(int) [Tahsis edildi]
*p1 [Sisteme geri verildi]
*p2 artik baska bir bellek adresini gosteriyor ve p2 nin gosterdigi eski adresi kaybettik bkz: MEMORY LEAK
Valgrind
valgrind --leak-check=full -s --track-origins=yes ./test
Valgrind çıktısı:
==18880== Memcheck, a memory error detector
==18880== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==18880== Using Valgrind-3.19.0 and LibVEX; rerun with -h for copyright info
==18880== Command: ./test
==18880== 
*p1(int) [Tahsis edildi]
*p2(int) [Tahsis edildi]
*p1 [Sisteme geri verildi]
*p2 artik baska bir bellek adresini gosteriyor ve p2 nin gosterdigi eski adresi kaybettik
==18880== 
==18880== HEAP SUMMARY:
==18880==     in use at exit: 4 bytes in 1 blocks
==18880==   total heap usage: 4 allocs, 3 frees, 73,736 bytes allocated
==18880== 
==18880== 4 bytes in 1 blocks are definitely lost in loss record 1 of 1
==18880==    at 0x4843003: operator new(unsigned long) (vg_replace_malloc.c:422)
==18880==    by 0x1091E9: main (in /home/dosya_yolu/test)
==18880== 
==18880== LEAK SUMMARY:
==18880==    definitely lost: 4 bytes in 1 blocks
==18880==    indirectly lost: 0 bytes in 0 blocks
==18880==      possibly lost: 0 bytes in 0 blocks
==18880==    still reachable: 0 bytes in 0 blocks
==18880==         suppressed: 0 bytes in 0 blocks
==18880== 
==18880== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

⚠️ Burada 4 alan tahsisi(4 allocs) yapıldığı ve sadece 3` ü sisteme geri verildiğini ifade ediyor. Bu durum bellek sızıntıdır(memory leak).

==18880== total heap usage: 4 allocs, 3 frees, 73,736 bytes allocated

⚠️ Burada ise sızıntının olduğu yeri vermektedir(bizim durumumuzda main içerisinde).

==18880== by 0x1091E9: main (in /home/dosya_yolu/test)

data_structures's People

Contributors

grafit-kil avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.