试用多态实现线性表(队列,串,堆栈),要求具备线性表的基本操作:插入,删除,测长等。

来源:互联网 发布:金税盘开票软件异常 编辑:程序博客网 时间:2024/05/18 00:54

试用多态实现线性表(队列,串,堆栈),要求具备线性表的基本操作:插入,删除,测长等。(参考程序员面试宝典 第二版P105)

#include <iostream>#include <vector>using namespace std;template<class T>class  tcontainer{public:virtual void push(const T&) = 0;virtual void pop() = 0;virtual const T  &begin() = 0;virtual const T  &end() = 0;virtual size_t size() = 0;};template <class T>class tvector:public tcontainer<T>{public:static const size_t step;tvector(){m_size = 0;m_cap = 0;m_pbuf =0;re_capacity(m_cap);}~tvector(){free(m_pbuf);m_pbuf = NULL;}virtual void re_capacity(size_t s);virtual void push(const T&);virtual void pop();virtual const T  &begin();virtual const T  &end();virtual size_t size();const T& operator[](size_t i);private:size_t m_size;  //实际元素的个数size_t m_cap;   //已经分配的容量T *m_pbuf;    //首地址};template <class T>const size_t tvector<T>::step = 100;  //数组增长的步上template <class T>void tvector<T>::re_capacity(size_t s){if (!m_pbuf){m_pbuf = new T[s];}else{delete[] m_pbuf;m_pbuf = new T[s];}}template <class T>void tvector<T>::push(const T& s)//入栈         {if (m_size>=m_cap)//m_size指向出栈的位置{re_capacity(m_cap += step);//依步长为step的值增加数组的空间}m_pbuf[m_size++] = s;}template <class T>void tvector<T>::pop() //出栈{if (m_size){m_size--;}}template <class T>const T& tvector<T>::begin()//栈头的值{return m_pbuf[0];}template <class T>const T& tvector<T>::end(){if (m_size){return m_pbuf[m_size - 1];}else{return false;}}template <class T>size_t tvector<T>::size(){return m_size;}template <class T>const T& tvector<T>::operator[](size_t i)  //重载运算符{if (i>=0 && i<m_size){return m_pbuf[i];}}void main(){int m = 100;tvector<int> data;for (int i=0;i<m;i++){data.push(i);}data.pop();int length = data.size();for (i=0;i<length;i++){printf(" %3d",data[i]);if (i%7 == 0){cout<<endl;}}system("pause");}

运行结构:


原创粉丝点击