链式线性表

#include<iostream>

using namespace std;
template <class T>
struct Node
{
T data;
Node<T> *next;
};
template <class T>
class List
{
public:
List(int len);
~List();
void Clear();
int Length(){
return length;
};
bool Empty(){ return head->next == NULL; };
T GetElem(int index);
void Insert(int index, const T t);
void Travese();
void Delete(int index,T *t);
private:
Node<T> *head;
int length;
};

template <class T>
List<T>::List(int len)
{
head = new Node<T>;
head->next = NULL;
length = len;
}

template <class T>
List<T>::~List()
{
Clear();
delete head;
}

template <class T>
void List<T>::Clear()
{
Node<T> *p = head->next;
Node<T> *q = head->next;
while (p!= NULL)
{
p = p->next;
delete q;
q = p;
}
length= 0;
}

template <class T>
T List<T>::GetElem(int index)
{
if (intdex<1 || index>length)
cout << "不在范围内";
else
{
int n = 0;
Node<T> *phead = head;
while (n != index)
{
p = p->next;
n++;
}
cout << p->data;
}
}

template <class T>
void List<T>::Insert(int index, const T t)
{
if (index<1 || index>length + 1)
cout << "不在范围内";
else
{
int n = 1;
Node<T> *p = head;

while (n != index)
{
p = p->next;

n++;
}
Node<T> * newnode = new Node<T>;
newnode->data = t;
newnode->next = p->next;
p->next=newnode;
length++;

}
}

template <class T>
void List<T>::Travese()
{

Node<T> *p = head->next;
while (p->next!= NULL)
{
p = p->next;
cout<<p->data;
}

}

template <class T>
void List<T>::Delete(int index,T *t)
{

if (index<1 || index>length + 1)
cout << "不在范围内";
else
{
int n = 0;
Node<T> *p = head;
Node<T> *q= head;
while (n != index)
{
n++;
q=p;
p = p->next;


}
q->next=p->next;
*t=p->data;
cout<<*t;
delete p;
length--;

}

 

}

 

 

 

#include"List.h"

int main()
{
List<int> list(10);
cout<<list.Empty();
list.Insert(1,2);
list.Travese();
int a;
list.Delete(1,&a);
cout<<a;
cin.get();
return 0;
}

posted @ 2016-05-31 14:12  ranran1203  阅读(120)  评论(0)    收藏  举报