Wednesday, 11 April 2012

Linked List/Bağlantılı liste

List Example with cpp / Bağlantılı liste örneği

#include<iostream>
#include<string>
#include<stdlib.h>
#include<stdio.h>
#include<iomanip>
#include<ctype.h>

using namespace std;
#include "Kayit.h"
typedef struct listeDugumu listeDugumu;
typedef listeDugumu *listeDugumuPtr;


void ekle(listeDugumuPtr *,listeDugumu *,int);
void listeyazdir(listeDugumuPtr);
int bosMu(listeDugumuPtr);
void sil(listeDugumuPtr *,int,int);
void menu(void);
void listebosalt(listeDugumuPtr *);
//void listeyibol(listeDugumuPtr *,int);
int main(){

 listeDugumuPtr baslangicPtr=NULL;
 listeDugumu *kayitPtr;
 kayitPtr =new listeDugumu;
 int dugumsayisi=0;
 int sirano;
 menu();
 int secim;
 cout << "? : ";
 cin >> secim;
 
 while(secim!=8){
   
  switch(secim){
  case 1 :
   cout << "Lutfen eklemek istediginiz kisinin bilgilerini giriniz" << endl;
   cout << "Eklenecek ismi giriniz : ";
   cin.ignore(1000, '\n');
   cin.getline(kayitPtr->isim,AD_UZUNLUK);
      cout <<"Eklenecek Telefon numarasi : ";
   cin >> setw(TEL_UZUNLUK) >> kayitPtr->tel_numarasi;
   cout << endl;
   ekle(&baslangicPtr,kayitPtr,dugumsayisi);
      listeyazdir(baslangicPtr);
   break;
  case 2 :
    if(!bosMu(baslangicPtr)){
    cout << "Silinecek siranoyu giriniz :";
    cin >> sirano;
    sil(&baslangicPtr,sirano,dugumsayisi);
    cout << "Kayit silindi" << endl;
    }else
     cout << "liste bos" << endl;
         break;
  case 3 : 
   listebosalt(&baslangicPtr);
     cout << "liste bosaltildi..." << endl;
   break;
  /*case 4 :
   cout << "listeyi kaca bolmek istiyorsunuz ?" << endl;
   cin >> kac;
   listeyibol(&baslangicPtr,dugumsayisi);
   break;
   */
  default:
   cout << "Yanlis bir giris yaptiniz tekrar giriniz" << endl;
   menu();
        break;
       }
  cout << "? : "; 
  cin >> secim;
 }
 cout << "program kapatılıyor";
 delete kayitPtr;
 
 return EXIT_SUCCESS;
}
void menu(void){
cout << "1-Kayit ekle" << endl;
cout << "2-Kayit sil" << endl;
cout << "3-Listeyi bosalt" << endl;
cout << "4-Listeyi ikiye bol" << endl;
cout << "8-Cikis" << endl;
  
}
void ekle(listeDugumuPtr *sPtr,listeDugumu *savePtr,int dugum_sayisi){
 listeDugumuPtr tara,arka,yeni;
  tara=*sPtr;
  yeni = new listeDugumu;
        *yeni=*savePtr;
  yeni->sonrakiPtr=NULL;
  if(*sPtr==NULL){
  *sPtr=yeni;//ilk düğüm ekleniyor
  dugum_sayisi++;
  return;
     }
  if(strcmp(yeni->isim,(*sPtr)->isim)<0)
  {
   yeni->sonrakiPtr=*sPtr;//Basa ekleniyor
   *sPtr=yeni;
   dugum_sayisi++;
   return;
  }
  while(tara && strcmp(yeni->isim,tara->isim)>0)
  {
  arka=tara;
  tara=tara->sonrakiPtr;
  
  }
  if(tara){
   yeni->sonrakiPtr=tara;//araya ekleniyor
   arka->sonrakiPtr=yeni;
   
  }
  else
   arka->sonrakiPtr=yeni;//sona ekleniyor
      dugum_sayisi++;
}
void listeyazdir(listeDugumuPtr suandakiPtr){
 int i=1;
 if(suandakiPtr==NULL)
  cout << "Rehber bos" << endl;
 else{
  cout << "Liste : " << endl;
    while(suandakiPtr!=NULL){
     cout << i << suandakiPtr->isim << "\t" << suandakiPtr->tel_numarasi << endl;
     suandakiPtr=suandakiPtr->sonrakiPtr;
     i++;
    }
 }
}
int bosMu(listeDugumuPtr basPtr){
   return basPtr==NULL;
}
void sil(listeDugumuPtr *sPtr,int sira,int dugum_sayisi){
 listeDugumuPtr tara,arka;
 int sayac=1;
 tara=*sPtr;
 if(sira<=0){
  cout << "yanlis sira no girdiniz" << endl;
  return;
 }
 if(sira==1){
 *sPtr=(*sPtr)->sonrakiPtr;
 delete tara;
 dugum_sayisi--;
 return;
 }
 while(tara && (sayac<sira)){
 arka=tara;
 tara=tara->sonrakiPtr;
 sayac++;
 }
 if(sayac<sira)
  cout << "silinecek kayit bulunamadi" << endl;
 else{
  arka->sonrakiPtr=tara->sonrakiPtr;
     delete tara;
     dugum_sayisi--;

 }
    
}
void listebosalt(listeDugumuPtr *sPtr){
   listeDugumuPtr tara;
   
    if(*sPtr==NULL)
  cout << "liste bos" << endl;
 else 
  while(*sPtr){
     tara=*sPtr;
  *sPtr=(*sPtr)->sonrakiPtr;
  delete tara;
  }

}

kayit.h is a header file for liste_example.cpp


#define AD_UZUNLUK 30
#define TEL_UZUNLUK 15
struct listeDugumu{
char isim[AD_UZUNLUK];
char tel_numarasi[TEL_UZUNLUK];
struct listeDugumu *sonrakiPtr;
};

No comments:

Post a Comment