第一次发文
在学习完数据结构线性表得链式表示和实现后,自己打了课本上的代码,在此记录一下
头文件内容 "LinkList"
template <typename T>
struct Node
{
T data;
Node<T> *next;
};
template <typename T>
class LinkList
{
private:
Node<T> *head;
Node<T> *GetPtr(int i);
public:
LinkList();
~LinkList();
LinkList(LinkList &L);
LinkList(T a[],int n);
int Length();
bool Empty();
void Clear();
void PrintList();
bool GetElem(int i,T &e);
bool SetElem(int i,T e);
int Search(T e);
bool Insert(int i,T e);
bool Delete(int i,T &e);
};
template <typename T>
LinkList<T>::LinkList()
{
head=new Node<T>;
head->next=NULL;
}
template <typename T>
LinkList<T>::~LinkList()
{
Clear();
delete head;
}
template <typename T>
LinkList<T>::LinkList(LinkList &L)
{
Node<T> *pre,*p;
head=new Node<T>;
head->next=NULL;
pre=head;
T e;
for(int i=1;i<=L.Length();i++)
{
L.GetElem(i,e);
p=new Node<T>;
p->data=e;
p->next=NULL;
pre->next=p;
pre=p;
}
}
template <typename T>
Node<T> *LinkList<T>::GetPtr(int i)
{
if(i==0)
return head;
Node<T> *p=head->next;
int count=1;
while(count<i)
{
p=p->next;
count++;
}
return p;
}
template <typename T>
LinkList<T>::LinkList(T a[],int n)
{
head=new Node<T>;
head->next=NULL;
Node<T> *pre=head,*p=NULL;
for(int i=0;i<n;i++)
{
p=new Node<T>;
p->data=a[i];
p->next=NULL;
pre->next=p;
pre=p;
}
}
template <typename T>
int LinkList<T>::Length()
{
int len=0;
Node<T> *p=head->next;
while(p!=NULL)
{
len++;
p=p->next;
}
return len;
}
template <typename T>
bool LinkList<T>::Empty()
{
return head->next==NULL;
}
template <typename T>
void LinkList<T>::Clear()
{
Node<T> *p=head->next;
while(p!=NULL)
{
head->next=p->next;
delete p;
p=head->next;
}
}
template <typename T>
void LinkList<T>::PrintList()
{
Node<T> *p=head->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
template <typename T>
bool LinkList<T>::GetElem(int i,T &e)
{
if(i<1||i>Length())
return false;
Node<T> *p;
p=GetPtr(i);
e=p->data;
return true;
}
template <typename T>
bool LinkList<T>::SetElem(int i,T e)
{
if(i<1||i>Length())
return false;
Node<T> *p=GetPtr(i);
p->data=e;
return true;
}
template <typename T>
int LinkList<T>::Search(T e)
{
Node<T> *p=head->next;
int i=1;
while(p!=NULL&&p->data!=e)
{
p=p->next;
i++;
}
if(p==NULL)
return 0;
else
return i;
}
template <typename T>
bool LinkList<T>::Insert(int i,T e)
{
if(i<1||i>Length()+1)
return false;
Node<T> *q,*p;
p=GetPtr(i-1);
q=new Node<T>;
q->data=e;
q->next=p->next;
p->next=q;
return true;
}
template <typename T>
bool LinkList<T>::Delete(int i,T &e)
{
if(i<1||i>Length())
return false;
Node<T> *p,*q;
p=GetPtr(i-1);
q=p->next;
e=q->data;
p->next=q->next;
delete q;
return true;
}
以下为测试"LinkList"正确性代码
#include<iostream>
#include"LinkList.h"
using namespace std;
int main()
{
LinkList<int> LL1;
int a[5]={11,22,33,44,55};
LinkList<int> LL2(a,5);
cout<<LL2.Length()<<endl;
cout<<LL2.Empty()<<endl;
LL2.PrintList();
int e;
LL2.GetElem(1,e);
cout<<e<<endl;
e=100;
LL2.SetElem(1,e);
LL2.PrintList();
int ans=LL2.Search(33);
cout<<ans<<endl;
LL2.Insert(1,99);
LL2.PrintList();
LL2.Delete(5,e);
cout<<e<<endl;
LL2.PrintList();
LinkList<int> LL3(LL2);
LL3.PrintList();
system("pause");
return 0;
}
在此记录自己的学习!