1.链表构造
节点构造:
template <typename type>
struct node{
type val;
node<type> *next;
node() {next=NULL;}
node(type &x,type<T1> *p){val=x;next=p;}
};
链表构造:
template <typename type>
class list{
public:
node<type> *head;//头结点;
list(){head=new node<type>;}
int Length();
bool Empty();
void Clear();
void Traverse(void(*visit)(const type &e));
bool Get_value(int pos,type &e);
bool Set_value(int pos,type &e);
bool Insert(int position, const type &x);
bool Delete(int pos);
node<type>* get_ptr(int position);
};
2.函数实现
2.1 链表长度
template <typename type>
int list<type>::Length(){
int count=0;
node<type> *temp_ptr;
for (temp_ptr=head->next;temp_ptr!=NULL;temp_ptr=temp_ptr->next) counr++;
return count;
}
2.2 判断链表是否为空
template <typename type>
bool list<type>::Empty(){
return head->next==NULL;
}
2.3 清空链表
template <typename type>
bool list<type>::Empty(){
return head->next==NULL;
}
2.4 对每个元素调用函数(*visit)
template <typename type>
void list<type>::Traverse(void (*visit)(const type &e)){
node<type> *temp_ptr;
for (temp_ptr=head->next;temp_ptr!=NULL;temp_ptr=temp_ptr->next){
(*visit)(temp_ptr->val);
}
}
2.5 取得元素值
将位置为pos的元素值赋值给e,如果位置不合理就返回false,合理返回true。
template <typename type>
bool list<type>::Get_value(int pos,type &e){
if (pos<1||pos>Length()) return false;
node<type> *temp_pos=get_ptr(pos);
e=temp_pos->val;
return true;
}
2.6 设置元素值
template <typename type>
bool list<type>::Set_value(int pos,type &e){
if (pos<1||pos>Length()) return false;
node<type> *temp_ptr=Get_ptr(pos);
temp_ptr->val=e;
return true;
}
2.7 插入元素值
template <typename type>
bool list<type>::Insert (int position, const type &x){
if (pos<1||pos>Length()+1) return false;
node<type> *temp_ptr=Get_ptr(position-1);
node<type> *new_ptr=new node<type>(temp_ptr->next,x);
temp_ptr->next=new_ptr;
return true;
}
2.8 删除元素
template <typename type>
bool list<type>::Delete(int pos){
if (pos<1||pos>Length()) return false;
node<type> *pre_pos,*next_pos;
pre_pos=Get_ptr(pos-1);
next_pos=Get_ptr(pos);
pre_pos->next=next_pos->next;
delete next_pos;
return true;
}