Saturday 27 August 2011

Creating single linked list

//creating and displaying the Single Linked List

Display singly Linked List from First to Last node

Steps for displaying the Singly Linked List:

1. first create the single linked list using function create().
2. traversal (visiting) 1st node, here first pointer points to 1st node, we can not modify the address of first (instance variable) so i have to declare temporary pointer p of type node<T>
in display()
3. store the address of 1st node into temporary pointer variable p
4. check the if the linked list is empty by using isempty() function, it linked list is empty, display message: it is empty
5. in order to display the values in the nodes 1st node to last, we should assign the address of each node in the Pointer variable p .

#include<iostream.h>
#include<conio.h>
#include<stdio.h> //in view of macro NULL
template<class T>
class sll;
template<class T>
class node
{
 private:
  T data;
  node<T>* link;
 friend class sll<T>;
};
template <class T>
class sll
{
 private:
 //declaring data member
  node<T> * first; //Self Referential Class
 public:
 //Mem.Fun declarations
  sll();
  int isempty();
  void display();
  void append(node<T> *k);
  void create();
};
//Member Functions defination
template<class T>
sll<T>::sll()
{
 first=NULL;//first points to no where,it is an empty node
}
template<class T>
int sll<T>::isempty()
{
 return(first==NULL);//return true when linked list is empty and false otherwise
}
template<class T>
void sll<T>::display()
{
 node<T>* p;//p is pointer to a node
 if(isempty())
  cout<<"Linked List is empty\n";
 else
 {
  cout<<"Linked list is as follows\n";
  p=first;
  while(p!=NULL)
  {
   cout<<p->data<<"\t"<<p->link<<"\n";
   p=p->link;
  }
 }//end of else
}//end of display()
template<class T>
void sll<T>::append(node<T> *k)
{
 node<T> *last;
 k->link=NULL;
 if(isempty())
  first=k;
 else
 {
  last=first;
  while(last->link!=NULL)//keep moving last pointer until last node is reached
  {
   last=last->link;
  }
  last->link=k;//attach last node and new node k
 }
}
template <class T>
void sll<T>::create()
{
 T x;
 node<T> *k;
 first=NULL;
 cout<<"enter values terminated by -1 or !\n";
 cin>>x;
 while(x!=-1&&x!='!')
 {
  k=new node<T>;
  k->data=x;
  append(k);
  cin>>x;
 }
}//end of create()
void main()
{
 sll<int> a;//creating object a, d.c is called
 a.create();
 a.display();
 getch();
}

No comments:

Post a Comment