C Programlama Tek Yönlü Bağlı Liste

  1. ce.berkan
    4
    60
    4.11.2018 12:43:00

    c programlama ile , c++ değil , veri yapıları dersinde tek yönlü bağlı listeyi öğrendik , şimdi bu yapıyı koda dökmek istiyorum ancak nereden nasıl başlamalıyım , yada bir tane örnek var mı , hazıra konmak için istemiyorum , verdiğiniz kodları inceleyip , sonra tekrar kendim yazacağım

    Ekleme yapabilsem sonrada eklediklerimi görüntülesem yeter.Silme ve aramada olursa süper olur.

    c 10 ay önce 265 Görüntüleme

( 1 ) Cevap

  1. komutanlogar
    2
    530
    15.06.2019 13:53:00

    aşağıdaki gibi bir örnek buldum harddiskimden, eskiden yazdığım c++ programlama konları içinde, bir inceleyebilirsin

    c-bagli-liste-veri-yapisi

    include

    #include<string>
    
    using namespace std;
    
    
    template< typename NODETYPE> class List;
    
    
    
    template <typename NODETYPE >
    class ListNode
    {
    
    
    friend class List<NODETYPE>;     
    
    
    public:      
    
    ListNode(const NODETYPE &);    
    NODETYPE getData() const;      
    
    private:
    
    NODETYPE data;        
    ListNode<NODETYPE> *nextPtr;
    
    };
    
    
    
    
    
    template <typename NODETYPE >
    ListNode<NODETYPE>::ListNode(const NODETYPE &info):data(info),nextPtr(0)
    {
    
    }
    
    
    template <typename NODETYPE >
    NODETYPE ListNode<NODETYPE>::getData() const
    {
    return data;         
    }
    
    
    
    template <typename NODETYPE >
    
    class List
    {
    
    
    public:
    
    List();      
    ~List();     
    
    void insertAtFront(const NODETYPE &);      
    void insertAtBack(const NODETYPE &);          
    bool removeFromFront( NODETYPE &);      
    bool removeFromBack( NODETYPE &);          
    bool isEmpty()const;
    void print()const;
    
    private:      
    
    ListNode<NODETYPE> *firstPtr;      
    ListNode<NODETYPE> *lastPtr;          
    
    
    ListNode<NODETYPE> *getNewNode(const NODETYPE &);        
    };
    
    
    template <typename NODETYPE >
    List<NODETYPE>::List():firstPtr(0),lastPtr(0)
    {
    
    }
    
    
    template <typename NODETYPE >
    List<NODETYPE>::~List(){
    
    if(!isEmpty())
      {
    
      cout<<"node yıkılıyor" ;
      ListNode<NODETYPE> *currentPtr=firstPtr;          
      ListNode<NODETYPE> *tempPtr;            
    
      while(currentPtr!=0)
      {
    
      tempPtr=currentPtr;
    
      cout<<tempPtr->data<<"\n";
      currentPtr=currentPtr->nextPtr;
      delete tempPtr;
    
    
      }
    
    }                      
    
     cout<<"tum node lar yıkıldı\n\n";                       
     }
    
    
    template <typename NODETYPE >
    void List<NODETYPE>::insertAtFront(const NODETYPE &value)
    {
    
    ListNode<NODETYPE> *newPtr=getNewNode(value);
    
    if(isEmpty())
    firstPtr=lastPtr=newPtr;     
    else{
    
    newPtr->nextPtr=firstPtr;     
     firstPtr=newPtr;    
    
     } 
    }
    
    
    
    template <typename NODETYPE >
    void List<NODETYPE>::insertAtBack(const NODETYPE &value)
    {
    
    ListNode<NODETYPE> *newPtr=getNewNode(value);
    
    if(isEmpty())
    {
    firstPtr=lastPtr=newPtr;     
    }
    else{
    
    lastPtr->nextPtr=newPtr;     
     lastPtr=newPtr;    
    
     } 
    }
    
    
    template <typename NODETYPE >
    bool List<NODETYPE>::removeFromFront(NODETYPE &value){
    
    
    if(isEmpty())
    return false;
    else
    {
    
    ListNode <NODETYPE> *tempPtr=firstPtr;           
    
    
     if(firstPtr==lastPtr)            
     firstPtr=lastPtr=0;
     else            
       firstPtr=firstPtr->nextPtr;
       value=tempPtr->data;          
    
     delete tempPtr;
    }    
    
    }
    
    
    
    template <typename NODETYPE >
    bool List<NODETYPE>::removeFromBack(NODETYPE &value){
    
    
    if(isEmpty())
    return false;
    else
    {
    
    ListNode <NODETYPE> *tempPtr=lastPtr;           
    
    
     if(firstPtr==lastPtr)            
     firstPtr=lastPtr=0;
     else 
     {       
     ListNode <NODETYPE> *currentPtr=firstPtr;           
    
       while(currentPtr ->nextPtr!=lastPtr)       
        currentPtr=currentPtr->nextPtr;        
    
    
    
       lastPtr=currentPtr;
       currentPtr->nextPtr=0;         
    }
    
    value=tempPtr->data; 
     delete tempPtr; 
     return true;
    
    }    
    
    }
    
    template <typename NODETYPE >
    
    bool List<NODETYPE>::isEmpty() const
    {
    return firstPtr==0;
    }
    
    
    template <typename NODETYPE >
    ListNode<NODETYPE> *List<NODETYPE>::getNewNode(const NODETYPE &value)
    {
    return new ListNode<NODETYPE>(value);
    
    }
    
    
    template <typename NODETYPE >
    
    void List<NODETYPE>::print() const{
    
    
         if(isEmpty())
         {
         cout<<"\nliste bos\n";             
         return;
         }
    
         ListNode<NODETYPE> *currentPtr=firstPtr;
    
         cout<<"\n\nListe= ";
    
         while(currentPtr!=0)
         {
         cout<<currentPtr->data<<' ';                    
           currentPtr=currentPtr->nextPtr;                  
    
         }
    
    cout<<"\n\n";
    
    }
    
    
    
    void instructions(){
    
    
    cout<<"\n1.Bastan Ekle\n2.Sondan Ekle\n3.Bastan Cikar\n4.Sondan Cikar\n5.Listele";
    
    
    
    
    
    }
    
    
    template <typename T >
    void testList(List< T >&listObject,const string &typeName)
    {
    
     cout<<"\n\nTEST LiSTESİ\n\n";    
         instructions();
    
        int choice;
        T value; 
    
        do{
    
     cout<<"?";
     cin>>choice; 
    
     switch(choice)
     {
    
    
     case 1:              
       cout<<"Enter"<<typeName<<":";            
        cin>>value;
        listObject.insertAtFront(value);
         listObject.print();          
          break;         
    
    
     case 2:
    
      cout<<"Enter<<"<<typeName<<":";    
       cin>>value;        
           listObject.insertAtBack(value);
         listObject.print();        
              break;        
    
    
      case 3:
    
           if(listObject.removeFromFront(value))  
             cout<<value<<"silindi";
    
             listObject.print();
                  break; 
    
    case 4:
         if(listObject.removeFromBack(value))  
             cout<<value<<"silindi";
    
             listObject.print();
                  break; 
    }               
    
    
    
     }while(choice<5);
    
    
    
    }
    
    
    
    
    
    
    
    int main()
    {
    
    
    List<int>integerList;
    testList(integerList,"integer");
    
    
    
    system("PAUSE");    
    return 0;    
    }
    

Cevabınız