/* ****************************** "list.cpp" Listクラス−実現部 生成元の積で表現されたブレイド ****************************** */ #include <stdio.h> #include "list.h" // 最初と最後のダミーセルを作成 List::List(void){ init=new Cell; last=new Cell; init->pre=NULL; init->next=last; init->element=0; last->pre=init; last->next=NULL; last->element=0; num=0; } // 最初と最後のダミーセルを作成,numを設定 List::List(int n){ init=new Cell; last=new Cell; init->pre=NULL; init->next=last; init->element=0; last->pre=init; last->next=NULL; last->element=0; num=n; } // リストの参照:initの指すセルを設定,initに繋がるセルの最後をlastが指す void List::Ref_init(Cell* p){ init=p; do{ p=p->next; }while(p->element!=0); last=p; } // リストの参照:lastの指すセルを設定,lastに繋がるセルの最後をinitが指す void List::Ref_last(Cell* p){ last=p; do{ p=p->pre; }while(p->element!=0); init=p; } // pの指すセルの次に要素xのセルを挿入 void List::Insert(Cell* p,int x){ Cell* q=p->next; Cell* r=new Cell; r->element=x; p->next=r; r->pre=p; r->next=q; q->pre=r; } // pの指すセルの次にリストLを挿入 void List::Insert(Cell* p,List& L){ Cell* q=L.Next(L.Init()); while(q!=L.Last()){ Insert(p,q->element); p=p->next; q=q->next; } } // pの指すセルを削除 void List::Delete(Cell* p){ Cell* q=p->pre; Cell* r=p->next; q->next=r; r->pre=q; delete p; } // pの指すセルからqの指すセルまでを削除 void List::Delete(Cell* p,Cell* q){ Cell* r=p->pre; Cell* s=q->next; r->next=s; s->pre=r; while(p->next!=q){ Delete(p->next); } delete p; delete q; } // リストの全要素を削除 void List::Clear(void){ while(init->next!=last){ Delete(init->next); } } // セルの要素を交換 void List::Swap(Cell* p,Cell* q){ int tmp=p->element; p->element=q->element; q->element=tmp; } // リストが空であるかどうかの判定 bool List::Empty(void){ if(init->next==last) return true; }