Data Structure-C++ code of Linked List

C++ code of Linked List


Here is a complete code of a double-linear linked l ist:

#include <cstdlib>
#include <iostream>
#include <conio.h>
using namespace std;

template <class Type> class List;

template <class Type>
class ListElem {
public:
ListElem (const Type elem){prev=next=0; val=elem;}
public:
Type val; // the element data
ListElem *prev; // previous link
ListElem *next; // next link
};

//---------------------------------------------------------
template <class Type>
class List {
public:
List(){pfirst=plast=0;}
~List();
void Insert (const Type&,int);
ListElem<Type> *getvalfirst();//return pfirst item in the list
ListElem<Type> *getvallast();//return plast item in the list
void Delete(int);//delete item from the list
void showfirst();//print out pfirst item on the screen
void showlast();//print out last item on the screen
void getallval();//print out all items on the screen
int countitem();//return the number of items in the list
protected:
ListElem<Type> *pfirst; // pfirst element in the list
ListElem<Type> *plast; // last element in the list

};

//destructor
template <class Type>
List<Type>::~List (void)
{
ListElem<Type> *item;
ListElem<Type> *next;
for(item =pfirst; item!= 0; item= next){
next = item->next;
delete item;
}

}
//insert item

template <class Type>
void List<Type>::Insert (const Type &elem,int pos)
{
ListElem<Type> *item = new ListElem<Type>(elem);//new element to be inserted

//empty list
if(pfirst==0 && plast==0){
pfirst=item;
plast=item;
}
//insert new item at the beginning of the list
else if(pos==1)
{
ListElem<Type> *f;
f=pfirst;
pfirst=item;
pfirst->next=f;
f->prev=pfirst;
}
//insert new item between items
else if(pos>1 && pos<=countitem()){
ListElem<Type> *ta;
ta=pfirst;
for(int t=1;t<pos;t=t+1){ta=ta->next;}
item->next=ta;
item->prev=ta->prev;
ta->prev->next=item;
ta->prev=item;
}
//insert new item at the end of the list
else if(pos==countitem()+1){
ListElem<Type> *t;
ListElem<Type> *x;
t=plast;
x=t;
t=item;
x->next=t;
t->prev=x;
plast=t;

}
//show message if position is not valid
else cout<<"Invalid position! Position must be between 1 and "<<countitem()+2<<"\n";

}

//Print out all items on the screen

template <class Type>
void List<Type>::getallval()
{
if(countitem()>0){
ListElem<Type> *i;
for(i=pfirst;i!=0;i=i->next){
cout<<"\n"<<i->val;

}
}
else cout<<"\nNo item found";
}

template <class Type>
int List<Type>::countitem()
{
ListElem<Type> *i;
int t=0;
for(i=pfirst;i!=0;i=i->next){
t=t+1;

}
return t;

}

template <class Type>
ListElem<Type> *List<Type>::getvalfirst()
{ return pfirst;
}

template <class Type>
void List<Type>::showfirst()
{
if(countitem()>0){
ListElem<Type> *f;
f=getvalfirst();
cout<<"Lirst value:"<<f->val<<"\n";
}
else cout<<"\n No item found\n";

}

template <class Type>
ListElem<Type> *List<Type>::getvallast()
{
return plast;
}

template <class Type>
void List<Type>::showlast()
{
if(countitem()>0){
ListElem<Type> *l;
l=getvallast();
cout<<"Last value:"<<l->val<<"\n";
}
else cout<<"\n No item found\n";
}

template <class Type>
void List<Type>::Delete(int pos){

if(countitem()>0){
ListElem<Type> *temp;


if(pos==1){
temp=pfirst;
pfirst=pfirst->next;
pfirst->prev=0;
delete temp;

}
else if(pos>1 && pos<countitem()){
temp=pfirst;
for(int i=1;i<pos;i=i+1){temp=temp->next;}
temp->prev->next=temp->next;
temp->next=temp->prev;
delete temp;

}
if(pos==countitem()){

temp=plast;
plast=plast->prev;
plast->next=0;
delete temp;

}

else cout<<"\nInvalid position!\n";

}

else cout<<"\n No item found";

}


int main(){
List<int> mylist;
mylist.Insert(30,1);
mylist.Insert(20,1);
mylist.Insert(24,1);
mylist.Insert(25,2);
mylist.Insert(200,3);
mylist.Insert(205,4);
mylist.Delete(6);
mylist.Delete(3);
mylist.showfirst();cout<<"\n";
mylist.showlast();cout<<"\n";
cout<<"\nNumber of Items:"<<mylist.countitem()<<"\n";
cout<<"All items:\n";
mylist.getallval();
getch();
return 0;
}




Comments

Name:
Comment:
Enter the text:
CAPTCHA image

....................................................................................................................Home | Forum | About | Contact
This website intents to provide free and high quality tutorials, examples, exercises and solutions, questions and answers of programming and scripting languages:
C, C++, C#, Java, VB.NET, Python, VBA,PHP & Mysql, SQL, JSP, ASP.NET,HTML, CSS, JQuery, JavaScript and other applications such as MS Excel, MS Access, and MS Word. However, we don't guarantee all things of the web are accurate. If you find any error, please report it then we will take actions to correct it as soon as possible.
Copyright @ 2011-2013 worldbestlearningcenter. All Rights Reserved.
Home Programming Web DB & App Questions Exercises Tips Programs FAQs Download About
Computer-Wbest
Popular Pages
You might like