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



