Thread: Rate my doubly linked list class and its functions

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Registered User nempo's Avatar
    Join Date
    Aug 2007
    Posts
    39

    Rate my doubly linked list class and its functions

    So, I've been trying to implement a doubly linked list in C but I ran into trouble when I tried to delete the first element of the list. Looked up C++ classes and such and decided to rewrite it as a class. And it seems to work a bit better now.

    Anyone feel like going over this one with a critical eye? :>

    EDIT: (Hope it's not too much code)

    Code:
    #include <iostream>
    
    using namespace std;
    
    class list {
      private:
        struct member {
          int ID;
    
          member *next;
          member *prev;
        };
    
        int nextID;
    
        member *start;
        member *link;
        member *end;
        
        list operator = (list);
    
      public:
        list() {
          start = link = end = NULL;
          nextID = 0;
        }
    
        ~list() {
          if(listExists()) {
            wipeList();
          }
        }
    
        void addLink();
        void delLink(int ID);
        void delStart();
        void delEnd();
        void wipeList();
        void printLinkID();
        bool nextLink();
        bool prevLink();
        bool seekLink(int ID);
        bool listExists();
    };
    
    bool list::listExists() {
      if(start != NULL) {
        return true;
      }
      
      return false;
    }
    
    void list::wipeList() {
      while(listExists()) {
        delStart();
      }
    }
    
    void list::delStart() {
      member *temp;
    
      if(listExists()) {
        temp = start;
        
        if(start->next != NULL) {
          start = start->next;
          start->prev = NULL;
        } else {
          start = NULL;
        }
        
        delete temp;
      }
    }
    
    void list::delEnd() {
      member *temp;
      
      if(listExists()) {
        temp = end;
        
        if(end->prev != NULL) {
          end = end->prev;
          end->next = NULL;
        } else {
          end = NULL;
        }
        
        delete temp;
      }
    }
    
    void list::delLink(int ID) {
      member *temp;
    
      if(seekLink(ID)) {
        if(link->next != NULL) {
          if(link->prev != NULL) {
            link->prev->next = link->next;
            link->next->prev = link->prev;
          } else {
            link->next->prev = NULL;
            start = link->next;
          }
    
          temp = link;
          link = link->next;
          delete temp;
        } else {
          temp = link;
          end = link->prev;
          end->next = NULL;
          delete temp;
        }
      }
    }
    
    void list::addLink() {
      if(listExists()) {
        member *newLink = new member;
    
        if(link->next != NULL) {
          newLink->next = link->next;
        } else {
          end = newLink;
        }
    
        newLink->prev = link;
        newLink->ID = nextID++;
        link->next = newLink;
      } else {
        start = new member;
        link = end = start;
    
        start->prev = start->next = NULL;
    
        link->ID = nextID++;
      }
    }
    
    bool list::seekLink(int ID) {
      link = start;
    
      do {
        if(link->ID == ID) {
          return true;
        }
      } while(nextLink());
    
      return false;
    }
    
    void list::printLinkID() {
      if(listExists()) {
        link = start;
    
        cout << "List Exists!" << endl;
    
        do {
          cout << link->ID << endl;
        } while(nextLink());
      } else {
        cout << "List does not exist!" << endl;
      }
    }
    
    bool list::nextLink() {
      if(link->next != NULL) {
        link = link->next;
    
        return true;
      }
    
      return false;
    }
    
    bool list::prevLink() {
      if(link->prev != NULL) {
        link = link->prev;
    
        return true;
      }
    
      return false;
    }
    
    int main() {
      list test;
      int i;
    
      for(i = 0; i < 10; i++) {
        test.addLink();
        test.nextLink();
      }
      
      test.printLinkID();
      
      cout << endl;
      
      test.delLink(0);
      test.delLink(4);
      test.delLink(9);
      
      test.printLinkID();
      
      cout << endl;
      
      test.delStart();
      test.delStart();
      test.delStart();
      test.delStart();
      test.delStart();
      test.delStart();
      test.delStart();
      test.delStart();
      
      test.printLinkID();
      
      return 0;
    }
    Last edited by nempo; 08-04-2007 at 11:28 AM.

Popular pages Recent additions subscribe to a feed