线性表之单循环链表
2012-05-24 15:30:03 来源:WEB开发网核心提示:#include<iostream>using namespace std;template<typename T>struct node{T data;node<T> *next;};template <typename T>class TList{private:no
#include<iostream> using namespace std; template<typename T>struct node{ T data; node<T> *next; }; template <typename T>class TList{ private: node<T> *tail; public: TList() { tail=new node<T>; tail->next=tail; } ~TList() { clearList(); } void clearList() { node<T> *q,*p,*t; q=tail->next; p=tail->next->next; while(p!=q) { t=p->next; delete p; p=t; } tail->next=tail; } bool empty() { return tail->next==tail; } int ListLength() { node<T> *p=tail->next; int i=0; while(p!=tail) { i++; p=p->next; } return i; } bool getElem(int i,T &e) { node<T> *p=tail->next->next; int j=0; if(i<0 || i>ListLength()) return false; while(j<i-1) { j++; p=p->next; } e=p->data; return true; } bool Insert(int i,T e) { node<T> *s,*p=tail->next; int j=0; if(i<1 || i>ListLength()+1) return false; while(j<i-1) { j++; p=p->next; } s=new node<T>; s->data=e; s->next=p->next; p->next=s; if(p==tail) tail=s; return true; } bool DeleteList(int i,T &e) { node<T> *q,*p=tail->next; int j=0; if(i<=0 || i>ListLength()) return false; while(j<i-1) { j++; p=p->next; } q=p->next; p->next=q->next; e=q->data; if(tail==q) tail=p; delete q; return true; } void print() { node<T> *p=tail->next->next; while(p!=tail->next) { cout<<p->data<<" "; p=p->next; } cout<<endl; } template<class T> friend ostream &operator << (ostream &,TList<T> & ); template<class T> friend void MergeList(TList <T>&,TList<T> &); template<class T> friend void MergeList(TList <T>&,TList<T> &,TList <T> &); }; template<class T> ostream & operator << (ostream & out,TList<T> & a ) { node<T> *p=a.tail->next->next; while(p!=a.tail->next) { out<<p->data<<" "; p=p->next; } out<<endl; return out; } template<class T> void MergeList(TList <T>&a,TList<T> &b) { node<T> *pa,*pb,*p; pa=a.tail->next->next; pb=b.tail ->next->next; p=a.tail->next; while(pa!=a.tail->next && pb!=b.tail->next) { if(pa->data <= pb->data) { p->next=pa; p=pa; pa=pa->next; } else{ p->next=pb; p=pb; pb=pb->next; } } while(pa!=a.tail->next) { p->next=pa; p=pa; pa=pa->next; } while(pb!=b.tail->next) { p->next=pb; p=pb; pb=pb->next; } p->next=pa; a.tail=p; b.tail=pb; b.tail->next=b.tail; } template<class T> void MergeList(TList <T>&a,TList<T> &b,TList <T> &c) { node<T> *pa,*pb,*pc; int i=1,j=1,k=0; T ai,bj; pa=a.tail->next->next; pb=b.tail->next->next; pc=c.tail->next; while(pa!=a.tail->next && pb!=b.tail->next) { a.getElem(i,ai); b.getElem(j,bj); if(ai<=bj) { c.Insert(++k,ai); i++; pa=pa->next; } else { c.Insert(++k,bj); j++; pb=pb->next; } } while(pa!=a.tail->next) { a.getElem(i++,ai); c.Insert(++k,ai); pa=pa->next; } while(pb!=b.tail->next) { b.getElem(j++,bj); c.Insert(++k,bj); pb=pb->next; } } int main() { TList<int > La,Lb,Lc; for(int i=1;i<4;i++) La.Insert (i,i); for(int i=1;i<4;i++) Lb.Insert (i,i*2); cout<<La; cout<<Lb; MergeList(La,Lb,Lc); MergeList(La,Lb); cout<<La; cout<<Lb; cout<<Lc; return 0; }
- ››线性回归拟合线Trend函数是这样来使用的
- ››线性表之双向循环链表
- ››线性表之单循环链表
- ››线性表之单链表
- ››线性表之顺序表
- ››线性表的顺序存储实验
- ››线性表的使用
更多精彩
赞助商链接