27 Ekim 2013 Pazar

C++ Bağlantılı Liste , Yığın , Kuyruk



         Aşağıdaki kod C++ ile kuyruk , yığın , bağlantılı liste yapılarının temel fonksiyonlarını ve benim eklediğim bir kaç fonksiyonu içermektedir.



#include <iostream>
using namespace std;

class Node {
public:
    int data;
        string data2;
        string data3;
        string data4;
    Node*    next;      
};

class List {
public:


    List(void) { head = NULL; }
  
       ~List(void);
    bool IsEmpty() { return head = NULL; }
    Node* InsertNode(int index);  
    int FindNode(int x);  
    int DeleteNode(int x);
    void DisplayList(void);
private:
    Node* head;
        friend class Stack;
        friend class Queue;
};

Node* List::InsertNode(int index){
    if (index < 0) return NULL;  
  
    int currIndex    =    1;
    Node* currNode    =    head;
    while (currNode && index > currIndex) {
        currNode    =    currNode->next;
        currIndex++;
    }
    if (index > 0 && currNode == NULL) return NULL;
    Node* newNode    = new Node;
    if (index == 0) {
        newNode->next    =    head;
        head        =    newNode;
    }
    else {
        newNode->next    =    currNode->next;
        currNode->next    =    newNode;
    }
    return newNode;
}


int List::FindNode(int x) {
    Node* currNode    =    head;
    int currIndex    =    1;
    while (currNode->data != x) {
        currNode    =    currNode->next;
        currIndex++;
    }
    return 0;
}

int List::DeleteNode(int x) {
    Node* prevNode    =    NULL;
    Node* currNode    =    head;
    int currIndex    =    1;
    while (currNode && currNode->data != x) {
        prevNode    =    currNode;
        currNode    =    currNode->next;
        currIndex++;
    }
    if (currNode) {
        if (prevNode) {
            prevNode->next    =    currNode->next;
            delete currNode;
        }
        else {
            head        =    currNode->next;
            delete currNode;
        }
        return currIndex;
    }
    return 0;
}

void List::DisplayList()
{
   int num        =    0;
   Node* currNode    =    head;
   while (currNode != NULL){
    cout << currNode->data<<endl;
    currNode    =    currNode->next;
    num++;
   }
   cout << "\nListedeki düğüm sayısı: " << num << endl<<endl;
}

List::~List(void) {
   Node* currNode = head, *nextNode = NULL;
   while (currNode != NULL)
   {
    nextNode    =    currNode->next;
    delete currNode;  
    currNode    =    nextNode;
   }
}
class Stack : public List {
public:

    Stack() {}

    ~Stack() {}


    int Top() {
        if (head == NULL) {
            cout << "Hata:Yığın Boş!"<< endl;
            return -1;
        }
        else
            return head->data;
    }

    void Push(int x)
        { InsertNode(0); }

    int Pop() {
        if (head == NULL) {
            cout << "Hata:Yığın Boş!" << endl;
            return -1;
        }
        else {
            int val = head->data;
            DeleteNode(val);
            return val;
        }
    }

    void DisplayStack() { DisplayList(); }

        void Findstack(int x){
            if(head == NULL){
                cout<<"Hata:Yığın Boş!"<<endl;
            }else{
                FindNode(x);
            }
        }


        int Dugumbul(int x){
         Node* currNode    = head;
         int currIndex = 0;
         while(currIndex != x){
        currNode = currNode->next;
                currIndex++;
     }
    return currNode->data;
        }

        void print(int x){
            Node* currNode = head;
        int currIndex = 0;
        while (currIndex != x) {
        currNode = currNode->next;
        currIndex++;
    }
       if (currNode)
        cout<<currNode->data<<endl;
        }
};
 class Queue {
public:

    Queue() {      
        front = rear = NULL;
        counter    = 0;
    }

    ~Queue() {
        while (!IsEmpty()) Dequeue();
    }

    bool IsEmpty() {
        if (counter)     return false;
        else            return true;
    }
    void Enqueue(int x);
    void Dequeue(void);
    void DisplayQueue(void);
        int Dugumbul(int x);
        void print(int x);
        int Bul(int x);
private:
    Node* front;  
    Node* rear;  
    int counter;  
};

int Queue::Bul(int x){
    Node* currNode    =    front;
    int currIndex    =    1;
    while (currNode->data != x) {
        currNode    =    currNode->next;
        currIndex++;
    }
    if (currNode)
        cout<<currNode->data<<endl;
    return 0;
}


void Queue::print(int x){
    Node* currNode = front;
        int currIndex = 0;
        while (currIndex != x) {
        currNode = currNode->next;
        currIndex++;
    }
       if (currNode)
        cout<<currNode->data<<endl;
}
int Queue::Dugumbul(int x){
         Node* currNode    = front;
         int currIndex = 0;
         while(currIndex != x){
        currNode = currNode->next;
                currIndex++;
     }
    return currNode->data;
}

void Queue::Enqueue(int x) {
    Node* newNode    =    new Node;
    newNode->data = x;
    newNode->next    =    NULL;
    if (IsEmpty()) {
        front        =    newNode;
        rear        =    newNode;
    }
    else {
        rear->next    =    newNode;
        rear        =    newNode;
    }
    counter++;
}

void Queue::Dequeue(void) {  
    if (IsEmpty()) {
        cout << "Hata:Kuyruk boş." << endl;
        return ;
    }
    else {
        Node* nextNode = front;
        front = front->next;
                delete nextNode;
        counter--;
    }
}

void Queue::DisplayQueue() {
        if (IsEmpty()) return;
    cout << "front -->";
    Node* currNode    =    front;
    for (int i = 0; i < counter; i++) {
        if (i == 0) cout << "\t";
        else        cout << "\t\t";
        cout << currNode->data;
        if (i != counter - 1)
            cout << endl;
        else
            cout << "\t<-- rear" << endl;
        currNode    =    currNode->next;      
    }
}

int main(void)
{
  
    Stack stack;
    Queue queue;
    List list;
  
    return 0;

}

0 yorum:

Yorum Gönder