// This is a linked list example
// list.hstruct 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