Linked Lists

Linked List

// This is a linked list example
// list.h

struct node {
  data d;
  node *next;
};
node *lst=0;

// list.cc

#include "list.h"
int locate (node *L, data srchd, node *&curr) {
  node *prev=0, *curr=first;
  while (curr && srchd>curr->d) {
    prev=curr;
    curr=curr->next;
  }
  return (curr && srchd==curr->d);
}

int addelt (node *L, data newd, node *curr) {
  if (!locate(newd)) {
    node *newnode = new node;
    newnode->d = newd;
    newnode->next = curr;
    if (curr != first)
      prev->next = newnode;
    else
      first = newnode;
    return 1;
  }
  return 0;
}

int list::delelt (data deld) {
  if (locate(deld)) {
    if (curr==first)
      first = first->next;
    else
      prev->next = curr->next;
    delete curr;
    return 1;
  }
  return 0;
}

void list::printlist () {
  curr = first;
  while (curr) {
    cout << curr->d << ' ';
    curr=curr->next;
  }
  cout << endl;
}

int list::same (list L) {
  if (numelts() == L.numelts()) {
    curr = first;
    L.curr = L.first;
    while (curr && L.curr && curr->d == L.curr->d) {
      curr = curr->next;
      L.curr = L.curr->next;
    }
    return (curr==0 && L.curr==0);
  }
  return 0;
}

// main.cc

#include "list.h"

main () {
  list L1,L2 ;
  L2.addelt (13);
  cout << "L2 contains: ";
  L2.printlist ();
  char Operation;
  data dat;
  while (cin >> Operation) {
    switch (Operation) {
      case 'a':
        cin >> dat;
        if (L1.addelt (dat))
          cout << dat << " added to list L1\n";
        else
          cout << dat << " already in list L1\n";
        break;
      case 'd':
        cin >> dat;
        if (L1.delelt (dat))
          cout << dat << " deleted from L1\n";
        else
          cout << dat << " not in list L1\n";
        break;
      case 'e':
        if (L1.empty())
          cout << "list L1 is empty\n";
        else
          cout << "list L1 is not empty\n";
        break;
      case 'n':
        cout << "number of items in list L1: " << L1.numelts() << '\n';
        break;
      case 's':
        if (L1.same (L2))
          cout << "L1 == L2\n";
        else
          cout << "L1 != L2\n";
        break;
      case 'p':
        cout << "list L1 contains: ";
        L1.printlist ();
        break;
    }
  }
}


// makefile
list: main.o list.o
g++ -o list main.o list.o
main.o: list.h main.cc
g++ -c main.cc
list.o: list.h list.cc
g++ -c list.cc

 

Home Up Next