C# Tutorials and offshore development in India
    Tutorials   Resources   Forum   Reviews   Communities   Interview   Jobs   Projects   Training   Your Ad Here    
Silverlight Games | Mentor | Code Converter | Articles | Code Factory | Computer Jokes | Members | Peer Appraisal | IT Companies | Bookmarks | Polls | Revenue Sharing | Lobby | Gift Shop |


Prizes & Awards
My Profile



Active Members
TodayLast 7 Days more...






Resources » Code Snippets » General »

LinkedList Example using c++


Posted Date: 25 Aug 2009    Resource Type: Code Snippets    Category: General
Author: Santosh Kumar SinghMember Level: Gold    
Rating: 1 out of 5Points: 4



////////////////////////////////////////
#ifndef LINKLIST_H
#define LINKLIST_H

template class LinkedList;
template
// The linked-list entry.
class ListEntry
{
T thisentry;
ListEntry* nextentry;
ListEntry* preventry;
ListEntry(T& entry);
friend class LinkedList;
};

template
// Construct a linked-list entry.
ListEntry::ListEntry(T &entry)
{
thisentry = entry;
nextentry = 0;
preventry = 0;
}

template
// The linked list.
class LinkedList
{
// The list head.
ListEntry* firstentry;
ListEntry* lastentry;
ListEntry* iterator;
void RemoveEntry(ListEntry *lentry);
void InsertEntry(T& entry, ListEntry *lentry);

public:
LinkedList();
~LinkedList();
void AppendEntry(T& entry);
void RemoveEntry(int pos = -1);
void InsertEntry(T& entry, int pos = -1);
T* FindEntry(int pos);
T* CurrentEntry();
T* FirstEntry();
T* LastEntry();
T* NextEntry();
T* PrevEntry();
};

template
// Construct a linked list.
LinkedList::LinkedList()
{
iterator = 0;
firstentry = 0;
lastentry = 0;
}

template
// Destroy a linked list
LinkedList::~LinkedList()
{
while (firstentry)
RemoveEntry(firstentry);
}

template
// Append an entry to the linked list.
void LinkedList::AppendEntry(T& entry)
{
ListEntry* newentry = new ListEntry(entry);
newentry->preventry = lastentry;
if (lastentry)
lastentry->nextentry = newentry;
if (firstentry == 0)
firstentry = newentry;
lastentry = newentry;
}

template
// Remove an entry from the linked list.
void LinkedList::RemoveEntry(ListEntry* lentry)
{
if (lentry == 0)
return;
if (lentry == iterator)
iterator = lentry->preventry;

// Repair any break made by this removal.
if (lentry->nextentry)
lentry->nextentry->preventry = lentry->preventry;
if (lentry->preventry)
lentry->preventry->nextentry = lentry->nextentry;

// Maintain list head if this is last and/or first.
if (lentry == lastentry)
lastentry = lentry->preventry;
if (lentry == firstentry)
firstentry = lentry->nextentry;

delete lentry;
}

template
// Insert an entry into the linked list.
void LinkedList::InsertEntry(T& entry, ListEntry* lentry)
{
ListEntry* newentry = new ListEntry(entry);
newentry->nextentry = lentry;

if (lentry)
{
newentry->preventry = lentry->preventry;
lentry->preventry = newentry;
}

if (newentry->preventry)
newentry->preventry->nextentry = newentry;
if (lentry == firstentry)
firstentry = newentry;
}

template
// Remove an entry from the linked list.
void LinkedList::RemoveEntry(int pos)
{
FindEntry(pos);
RemoveEntry(iterator);
}

template
// Insert an entry into the linked list.
void LinkedList::InsertEntry(T& entry, int pos)
{
FindEntry(pos);
InsertEntry(entry, iterator);
}

template
// Return the current linked-list entry.
T* LinkedList::CurrentEntry()
{
return iterator ? &(iterator->thisentry) : 0;
}

template
// Return a specific linked-list entry.
T* LinkedList::FindEntry(int pos)
{
if (pos != -1)
{
iterator = firstentry;
if (iterator)
{
while (pos--)
iterator = iterator->nextentry;
}
}

return CurrentEntry();
}

template
// Return the first entry in the linked list.
T* LinkedList::FirstEntry()
{
iterator = firstentry;

return CurrentEntry();
}

template
// Return the last entry in the linked list.
T* LinkedList::LastEntry()
{
iterator = lastentry;

return CurrentEntry();
}

template
// Return the next entry in the linked list.
T* LinkedList::NextEntry()
{
if (iterator == 0)
iterator = firstentry;
else
iterator = iterator->nextentry;

return CurrentEntry();
}

template
// Return the previous entry in the linked list.
T* LinkedList::PrevEntry()
{
if (iterator == 0)
iterator = lastentry;
else
iterator = iterator->preventry;

return CurrentEntry();
}

#endif



Responses

Author: Miss Meetu Choudhary    27 Aug 2009Member Level: Diamond   Points : 2
Must add description to your code.


Feedbacks      
Popular Tags   What are tags ?   Search Tags  
Sign In to add tags.
LinkedList Example using c++  .  

Post Feedback


This is a strictly moderated forum. Only approved messages will appear in the site. Please use 'Spell Check' in Google toolbar before you submit.
You must Sign In to post a response.
Next Resource: Unary - operator Overloading in c++
Previous Resource: File Creation and manipulation in c++
Return to Discussion Resource Index
Post New Resource
Category: General


Post resources and earn money!
 
More Resources



dotNet Slackers

About Us    Contact Us    Privacy Policy    Terms Of Use