📄 abschain.h
字号:
#ifndef Chain_#define Chain_// file abschain.h#include<iostream.h>#include "cnode.h"#include "abslist.h"#include "xcept.h"template <class T> class ChainIterator;template<class T>class Chain : AbstractList<T> { friend ChainIterator<T>; public: Chain() {first = 0;} ~Chain(); bool IsEmpty() const {return first == 0;} int Length() const; bool Find(int k, T& x) const; int Search(const T& x) const; AbstractList<T>& Delete(int k, T& x); AbstractList<T>& Insert(int k, const T& x); void Output(ostream& out) const; private: ChainNode<T> *first;};template<class T>Chain<T>::~Chain(){// Destroy. ChainNode<T> *i; while (first) {i = first->link; delete first; first = i;}}template<class T>int Chain<T>::Length() const{// size of list ChainNode<T> *i = first; int len = 0; while (i) {len++; i = i->link;} return len; }template<class T>bool Chain<T>::Find(int k, T& x) const{// Find k'th element. if (k < 1) return false; ChainNode<T> *i = first; int j = 1; while (j < k && i) {j++; i = i->link;} if (i) {x = i->data; return true;} return false; // no k'th element}template<class T>int Chain<T>::Search(const T& x) const{// Locate x. ChainNode<T> *i = first; int j = 1; while (i && i->data != x) {j++; i = i->link;} if (i) return j; return 0;}template<class T>AbstractList<T>& Chain<T>::Delete(int k, T& x){// Delete k'th element. if (k < 1 || !first) throw OutOfBounds(); // no k'th ChainNode<T> *i = first; if (k > 1) {// not first element int j = 1; while (j < k - 1 && i) {j++; i = i->link;} if (!i || !i->link) throw OutOfBounds(); // no k'th ChainNode<T> *y = i->link; // k'th i->link = y->link; i = y; } else // delete first element first = first->link; x = i->data; delete i; return *this;}template<class T>AbstractList<T>& Chain<T>::Insert(int k, const T& x){// Insert x after k'th element. if (k < 0) throw OutOfBounds(); ChainNode<T> *i = first; int j = 1; while (j < k && i) {j++; i = i->link;} if (k > 0 && !i) throw OutOfBounds(); // no k'th // insert ChainNode<T> *y; y = new ChainNode<T>; y->data = x; if (k) {y->link = i->link; i->link = y;} else {y->link = first; first = y;} return *this;}template<class T>void Chain<T>::Output(ostream& out) const{// Insert the chain elements into the stream out. ChainNode<T> *i; for (i = first; i; i = i->link) out << i->data << " ";}// overload <<template <class T>ostream& operator<<(ostream& out, const Chain<T>& x) {x.Output(out); return out;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -