最基本的顺序表(经典顺序表)
来源:互联网 发布:象过河软件 编辑:程序博客网 时间:2024/05/18 20:13
// 顺序表.cpp -- 最基本的顺序表(经典顺序表)// 完整的class.// List abstract class -- 线性表的C++抽象类声明template<class Elem> class List(){ public: // Reinitialize the list. the client is responsible for // reclaiming the storange used by the list elements. virtual void clear() = 0; // Insert an element at the front of the right partition. // Return true if successful, false if the list is full. virtual bool insert(const Elem&) = 0; // Append an element at the end of the right partition. // Return true if successful, false if the list is full. virtual bool append(const Elem&) = 0; // Remove the first element of right partition. Return // true if successful, false if the list is empty. // The element removed is returned in the parameter. virtual bool remove(Elem&) = 0; // Place fence at list start, making left partition empty. virtual void setStart() = 0; // Place fence at list end, making right partition empty. virtual void setEnd() = 0; // Move fence one step left; no change if already at start. virtual void prev() = 0; // Move fence one step right; no change if already at end virtual void next() = 0; // Return length of left partition virtual int leftLength() const = 0; // Return length of right partition virtual int rightLength() const = 0; // If pos or more elements are in the list, set the size // of left partition to pos and return true. Otherwise, // do nothing and return false. virtual bool setPos(int pos) = 0; // Return in first parameter the first element of the // right partition. Return true if successful, false // if the right partition is empty. virtual bool getValue(Elem&) const = 0; // print the contents of the list virtual void print() const = 0;};// Array-based list implementation -- 线性表的实现template <class Elem>class Alist: public List<Elem> //继承{ private: int maxSize; // Maximum size of list int listSize; // Actual number of elements in list int fence; // Position of fence Elem* listArray; // Array holding list elementss public: AList(int size = DefaultListSize) // constructor { maxSize = size; lastSize = fence = 0; listArray = new Elem[maxSize]; } ~AList() { delete [] listArray;} // Destructor void clear() { delete [] listArray; listSize = fence = 0; listArray = new Elem[maxSize]; } bool insert(const Elem&); bool append(const Elem&); bool remove(Elem&); void setStart() { fence = 0;} void setEnd() { fence = listSize;} void prev() { if (fence != 0) fence--;} void next() { if (fence <= listSize) fence++;} int leftLength()const {return fence;} int rightLength()const {return lastsize - fence;} bool setPos(int pos) { if ((pos >= 0) && (pos <= listSize)) fence = pos; return (pos >= 0) && (pos <= listSize); } bool getValue(Elem& it)const() { if (rightLength() == 0) return flase; else { it = listArray[fence]; reutrn true;} } void print()const { int temp = 0; cout << " < "; while (temp < fence) cout << listArray[temp++] << " "; cout << " | "; while (temp < ListSize) cout << listarray[temp++] << " "; cout << " >\n"; }};template <class Elem> // Insert at front of right partitionbool Alist <Elem>::insert(const Elem& item){ if (listsize == maxSize) return flase; // List is full for (int i = listsize; i > fence; i--) // Shift Elem up listArray[i] = listArray[i-1]; // to make room listArray[fence] = item; listSize++; // Increment list size return true;}// Remove and return first Elem in right partitiontemplate <class Elem> bool AList <Elem>::remove(Elem& it){ if (rightLength() == 0) return false; // nothing in right it = listArray[fence]; // copy removed elem for (int i = fence; i < listSize -1; i++) // Shift them down listArray[i] = listArray[i + 1]; listSize--; // Decrement Size return true;}// 看完以后就觉得,原来掌握顺序表是很简单的事,只需要掌握几个点;// 其中最重要的思想是确定位置。// 知道现在的位置,开始的位置,结束的位置,数组的大小,该位置左右的大小。
- 最基本的顺序表(经典顺序表)
- (2011.07.19) 顺序表.cpp -- 最基本的顺序表(经典顺序表)
- 顺序表的基本操作(C++)
- 顺序表的基本操作(new)
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本运算
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- Sql查询中的通配字符
- 最基本的单链表C++
- 2011-9-17 13:39:38
- aptitude
- “2011软件自由日”(Software Freedom Day 2011)
- 最基本的顺序表(经典顺序表)
- java:经典文件写入和读取,速度超快
- 漫谈经典排序算法:三、冒泡排序 && 快速排序
- 编写判断给定二叉树是否为二叉排序树的函数
- 实现验证码的刷新,或局部刷新
- 计划永远赶不上变化
- Inside Microsoft SQL Server 2005: T-SQL Programming (数据类型|第一章) DATETIME
- 增加反向链接的35个技巧
- C# 往数据库里存图片的总结(二进制转图片,图片转二进制)