/* ============================================================================ Name : Node.cpp Author : ntsk13 [email protected] Version : Copyright : GPL Description : Link list study, complement by C++ Date : 2015.06.15 ============================================================================ */ #include <iostream> using namespace std; typedef struct { int data; }Elem_t; typedef struct lnode{ Elem_t e; struct lnode * next; }node,*pnode; class Link { public: void init(pnode * L); void clear(pnode *L); int get_length(pnode *L); Elem_t get_elem(pnode *L,int i); void traverse(pnode *L); void insert(pnode *L,Elem_t e,int i); void delete_elem(pnode *L,int i); }; int main(void) { pnode H=NULL;//head p Elem_t zero,one,two,three,four,five; zero.data=0; one.data=1; two.data=2; three.data=3; four.data=4; Link list; list.init(&H); list.insert(&H,zero,0); list.insert(&H,one,1); list.insert(&H,two,2); list.insert(&H,three,3); list.insert(&H,four,4); list.traverse(&H); cout<<"len is "<<list.get_length(&H)<<endl; five=list.get_elem(&H,4); cout<<"================================="<<endl; cout<<"five is "<<five.data<<endl; list.delete_elem(&H,4); cout<<"================================="<<endl; list.traverse(&H); cout<<"len is "<<list.get_length(&H)<<endl; return 0; } void Link::init(pnode * L) { *L=new node;//构造一个头结点 ((*L)->e).data =0;//头结点的data作为长度 (*L)->next=NULL; } void Link::clear(pnode *L) { int i=0; pnode p=*L; pnode tmp=NULL; int len=( (*L)->e).data; for(i=0;i<len;i++) { tmp=p->next; delete p; p=tmp; } *L=NULL; } int Link::get_length(pnode *L) { return ( (*L)->e).data;; } Elem_t Link::get_elem(pnode *L,int i) { int j=0; pnode p=(*L)->next; while(j <i ) { j++; p=p->next; } return p->e; } void Link::traverse(pnode *L) { int i=0; pnode p=(*L)->next;//避免把头指针元素输出 int len=( (*L)->e).data; for(i=0;i< len;i++) { cout<<"The "<<i<<"th elem is "<<(p->e).data<<endl; p=p->next; } } void Link::insert(pnode *L,Elem_t e,int i)// before i insert { int j=0; pnode p=*L; pnode tmp=NULL; for(j=0;j< i;j++) { p=p->next; } tmp=new node; (tmp->e).data=e.data; tmp->next=p->next; p->next=tmp; ( (*L)->e).data++; } void Link::delete_elem(pnode *L,int i) { int j=0; pnode p=(*L)->next; pnode tmp=NULL; for(j=0;j< i-1;j++) { p=p->next; } tmp=p; p->next=p->next->next; ( (*L)->e).data--; delete tmp->next; } =================================== /* ============================================================================ Name : Node.cpp Author : ntsk13 [email protected] Version : Copyright : GPL Description : Link list study, complement by C++ Date : 2015.06.15 ============================================================================ */ #include <iostream> using namespace std; typedef struct { int data; }Elem_t; typedef struct lnode{ Elem_t e; struct lnode * next; }node,*pnode; class Link { public: void init(pnode & L); void clear(pnode & L); int get_length(pnode &L); Elem_t get_elem(pnode &L,int i); void traverse(pnode &L); void insert(pnode &L,Elem_t e,int i); void delete_elem(pnode &L,int i); }; int main(void) { pnode H=NULL;//head p Elem_t zero,one,two,three,four,five; zero.data=0; one.data=1; two.data=2; three.data=3; four.data=4; Link list; list.init(H); list.insert(H,zero,0); list.insert(H,one,1); list.insert(H,two,2); list.insert(H,three,3); list.insert(H,four,4); list.traverse(H); cout<<"len is "<<list.get_length(H)<<endl; five=list.get_elem(H,4); cout<<"================================="<<endl; cout<<"five is "<<five.data<<endl; list.delete_elem(H,4); cout<<"================================="<<endl; list.traverse(H); cout<<"len is "<<list.get_length(H)<<endl; return 0; } void Link::init(pnode & L) { L=new node;//构造一个头结点 (L->e).data =0;//头结点的data作为长度 L->next=NULL; } void Link::clear(pnode & L) { int i=0; pnode p=L; pnode tmp=NULL; int len=(L->e).data; for(i=0;i<len;i++) { tmp=p->next; delete p; p=tmp; } L=NULL; } int Link::get_length(pnode & L) { return (L->e).data;; } Elem_t Link::get_elem(pnode & L,int i) { int j=0; pnode p=L->next; while(j <i ) { j++; p=p->next; } return p->e; } void Link::traverse(pnode & L) { int i=0; pnode p=L->next;//避免把头指针元素输出 int len= (L->e).data; for(i=0;i< len;i++) { cout<<"The "<<i<<"th elem is "<<(p->e).data<<endl; p=p->next; } } void Link::insert(pnode & L,Elem_t e,int i)// before i insert { int j=0; pnode p=L; pnode tmp=NULL; for(j=0;j< i;j++) { p=p->next; } tmp=new node; (tmp->e).data=e.data; tmp->next=p->next; p->next=tmp; ( L->e).data++; } void Link::delete_elem(pnode & L,int i) { int j=0; pnode p=L->next; pnode tmp=NULL; for(j=0;j< i-1;j++) { p=p->next; } tmp=p; p->next=p->next->next; (L->e).data--; delete tmp->next; }