I'm currently working on implementing a list-type structure at work, and I need it to be crazy effective. In my search for effective data structures I stumbled across a patent for a quad liked list, and this sparked my interest enough to make me forget about my current task and start investigating the quad list instead. Unfortunately, internet was very secretive about the whole thing, and google didn't produce much in terms of usable results. The only explanation I got was the patent description that stated:

A quad linked data structure that provides bidirectional search capability for multiple related fields within a single record. The data base is searched by providing sets of pointers at intervals of N data entries to accommodate a binary search of the pointers followed by a linear search of the resultant range to locate an item of interest and its related field.

This, unfortunately, just makes me more puzzled, as I cannot wrap my head around the non-layman explanation. So therefore I turn to you all in hope that you can explain to me what this quad linked history really is, as I know not knowing will drive me up and over the walls pretty quickly.

I've not come across the term formally before, but from the patent description, I can make an educated guess.

A linked list is one where each node has a link to the next...

``````a -->-- b -->-- c -->-- d -->-- null
```
```

A doubly linked list means each node holds a link to its predecessor as well.

``````  --<--   --<--   --<--
|       |       |       |
a -->-- b -->-- c -->-- d -->-- null
```
```

Let's assume the list is sorted. If I want to perform binary search, I'd normally go half way down the list to find the middle node, then go into the appropriate interval and repeat. However, linked list traversal is always O(n) - I have to follow all the links. From the description, I think they're just adding additional links from a node to "skip" a fixed number of nodes ahead in the list. Something like...

``````  --<--   --<--   --<--
|       |       |       |
a -->-- b -->-- c -->-- d -->-- null
|                       |
|----------->-----------|
-----------<-----------
```
```

Now I can traverse the list more rapidly, especially if I chose the extra link targets carefully (i.e. ensure they always go back/forward half of the offset of the item they point from in the list length). I then find the rough interval I want with these links, and use the normal links to find the item.

This is a good example of why I hate software patents. It's eminently obvious stuff, wrapped in florid prose to confuse people.