#include<iostream.h>
#include<constream.h>
template<class T>
class IndirectList
{
private:
int length;
int MaxSize;
T**table;
public:
IndirectList(int MaxLinearSize=10);
~IndirectList();//destructor
int IsEmpty()const{return length==0;}
int Length()const{return length;}
int Find(int k,T&x)const;
int Search(const T&x)const;
void Delete(int k,T&x);
void Insert(int k,const T&x);
void Output()const;
};
template<class T>
IndirectList<T>::IndirectList(int MaxListSize)
{
MaxSize=MaxListSize;
table=new T*[MaxSize];
length=0;
}
template<class T>
IndirectList<T>::~IndirectList()
{
for(int i=0;i<length;i++)
delete table[i];
delete[]table;
}
template<class T>
int IndirectList<T>::Find(int k,T&x)const
{
if(k<1||k>length)
return 0; //no kth element
if(x==*table[k-1])
return 1;
else
return 0;
}
template<class T>
int IndirectList<T>::Search(const T&x)const
{
for(int i=0;i<length;i++)
if(*table[i]==x)
return ++i;
return 0;
}
template<class T>
void IndirectList<T>::Delete(int k,T&x)
{
if(Find(k,x))
{
for(int i=k;i<length;i++)
table[i-1]=table[i];
length--;
}
else
cout<<"out of bounds\n";
}
template<class T>
void IndirectList<T>::Insert(int k,const T&x)
{
if(k<0||k>length)
cout<<"out of bounds\n";
if(length==MaxSize)
cout<<"no memory\n";
for(int i=length-1;i>=k;i--)
table[i+1]=table[i];
table[k]=new T;
*table[k]=x;
length++;
}
template<class T>
void IndirectList<T>::Output()const
{
if(IsEmpty())
cout<<"list is empty\n";
else
for(int i=0;i<length;i++)
cout<<*table[i]<<"\t";
}
void menu()
{
cout<<"\n MENU\n";
cout<<"1.Length\n";
cout<<"2.Find\n";
cout<<"3.Search\n";
cout<<"4.Delete\n";
cout<<"5.Insert\n";
cout<<"6.Output\n";
}
void main()
{
int choice;
int k,x,len,p;
clrscr();
IndirectList<int>obj;
do
{
menu();
cout<<"enter choice\n";
cin>>choice;
switch(choice)
{
case 1:
len=obj.Length();
if(len==0)
cout<<"List is empty\n";
else
cout<<"length of Indirectlist is "<<len<<endl;
break;
case 2:
cout<<"enter k,x(position and value)\n";
cin>>k>>x;
p=obj.Find(k,x);
if(p==1)
cout<<"found"<<endl;
if(p==0)
cout<<"not found"<<endl;
break;
case 3:
cout<<"enter x(value)\n";
cin>>x;
p=obj.Search(x);
if(p)
cout<<"searching is sucessful and found at "<<p<<endl;
else
cout<<"searching not sucessful"<<endl;
break;
case 4:
cout<<"enter k,x(position and value)\n";
cin>>k>>x;
obj.Delete(k,x);
break;
case 5:
cout<<"enter k,x(index and value)\n";
cin>>k>>x;
obj.Insert(k,x);
break;
case 6:
cout<<"elements in the list are:\n\n";
obj.Output();
break;
default:
cout<<"invalid choice\n";
}
}
while(choice>=1&&choice<=6);
getch();
} |
#include<iostream.h>
#include<constream.h>
template<class T>
class IndirectList
{
private:
int length;
int MaxSize;
T**table;
public:
IndirectList(int MaxLinearSize=10);
~IndirectList();//destructor
int IsEmpty()const{return length==0;}
int Length()const{return length;}
int Find(int k,T&x)const;
int Search(const T&x)const;
void Delete(int k,T&x);
void Insert(int k,const T&x);
void Output()const;
};
template<class T>
IndirectList<T>::IndirectList(int MaxListSize)
{
MaxSize=MaxListSize;
table=new T*[MaxSize];
length=0;
}
template<class T>
IndirectList<T>::~IndirectList()
{
for(int i=0;i<length;i++)
delete table[i];
delete[]table;
}
template<class T>
int IndirectList<T>::Find(int k,T&x)const
{
if(k<1||k>length)
return 0; //no kth element
if(x==*table[k-1])
return 1;
else
return 0;
}
template<class T>
int IndirectList<T>::Search(const T&x)const
{
for(int i=0;i<length;i++)
if(*table[i]==x)
return ++i;
return 0;
}
template<class T>
void IndirectList<T>::Delete(int k,T&x)
{
if(Find(k,x))
{
for(int i=k;i<length;i++)
table[i-1]=table[i];
length--;
}
else
cout<<"out of bounds\n";
}
template<class T>
void IndirectList<T>::Insert(int k,const T&x)
{
if(k<0||k>length)
cout<<"out of bounds\n";
if(length==MaxSize)
cout<<"no memory\n";
for(int i=length-1;i>=k;i--)
table[i+1]=table[i];
table[k]=new T;
*table[k]=x;
length++;
}
template<class T>
void IndirectList<T>::Output()const
{
if(IsEmpty())
cout<<"list is empty\n";
else
for(int i=0;i<length;i++)
cout<<*table[i]<<"\t";
}
void menu()
{
cout<<"\n MENU\n";
cout<<"1.Length\n";
cout<<"2.Find\n";
cout<<"3.Search\n";
cout<<"4.Delete\n";
cout<<"5.Insert\n";
cout<<"6.Output\n";
}
void main()
{
int choice;
int k,x,len,p;
clrscr();
IndirectList<int>obj;
do
{
menu();
cout<<"enter choice\n";
cin>>choice;
switch(choice)
{
case 1:
len=obj.Length();
if(len==0)
cout<<"List is empty\n";
else
cout<<"length of Indirectlist is "<<len<<endl;
break;
case 2:
cout<<"enter k,x(position and value)\n";
cin>>k>>x;
p=obj.Find(k,x);
if(p==1)
cout<<"found"<<endl;
if(p==0)
cout<<"not found"<<endl;
break;
case 3:
cout<<"enter x(value)\n";
cin>>x;
p=obj.Search(x);
if(p)
cout<<"searching is sucessful and found at "<<p<<endl;
else
cout<<"searching not sucessful"<<endl;
break;
case 4:
cout<<"enter k,x(position and value)\n";
cin>>k>>x;
obj.Delete(k,x);
break;
case 5:
cout<<"enter k,x(index and value)\n";
cin>>k>>x;
obj.Insert(k,x);
break;
case 6:
cout<<"elements in the list are:\n\n";
obj.Output();
break;
default:
cout<<"invalid choice\n";
}
}
while(choice>=1&&choice<=6);
getch();
}
Editorial Team
We are a group of young techies trying to provide the best study material for all Electronic and Computer science students. We are publishing Microcontroller projects, Basic Electronics, Digital Electronics, Computer projects and also c/c++, java programs.