c++ 模板实现顺序表

 /************************************

          WZ ASUST   2016
         顺序表 第二个模板

************************************/
#include"wz.h"
#include"sts.h"
template <typename T>
class seqlist
{
public:
seqlist()
:_data(NULL)
,_size(0)
,_capacity(0)
{
CheckCapacity();
}
/*seqlist(const T& d)
:_data(d._data)
,_size(d._size)
,_capacity (d._capacity)
{

}
}*/
~seqlist()
{
if(_data!=NULL)
    delete [] _data;
}
public:
void CheckCapacity()
{
if(_size == _capacity)
{
T* tmp=new T[2*_capacity+3];
memcpy(tmp,_data,_size*sizeof(T));
delete _data;
_data = tmp;
_capacity =2*_capacity+3 ;
} 
}
public:
void PushBack(const T& d);
void PopBack();
void PushFront(const T& d);
void PopFront();
        void Insert(const size_t pos, const T& x);
        void Erase(const size_t pos);
        int Find(const T& x);
        void reverse();
void Print()
{
int i=0;
for(i=0;i<_size;i++)
{
cout<<_data[i]<<" ";
}
cout<<endl;
}
private:
T* _data;
int _size;
int _capacity;
};
template <typename T>
void seqlist<T>:: PushBack(const T& d)
{
CheckCapacity();
_data[_size] = d;
_size++;
}
template <typename T>
void seqlist<T>:: PopBack()
{
if(_data == NULL)
{
return;
}
_size--;
}
template <typename T>
void seqlist<T>:: PushFront(const T& d)
{
CheckCapacity();
int i=0;
for(i=_size;i>0;--i)
{
_data[i] = _data[i-1];
}
_data[i] = d;
++_size;
}
template <typename T>
void seqlist<T>::PopFront()
{
int i=0;
for(i=0;i<_size;i++)
{
_data[i-1] = _data[i];
}
--_size;
}
template<typename T>
void seqlist<T>::Insert(const size_t pos, const T& x)
{
CheckCapacity ();
int i=0;
for(i=_size;i>pos;--i)
{
_data[i] = _data[i-1];
}
_data[i]=x;
++_size;
}
template<typename T>
void seqlist<T>::Erase(const size_t pos)
{
int i = 0;
for(i=pos;i<_size-1;i++)
{
_data[i] = _data[i+1];
}
--_size;
}
template<typename T>
int seqlist<T>::Find(const T& x)
{
int i=0;
for(i=0;i<_size;i++)
{
if(_data[i]== x)
return i;
}
return -1;
}
template<typename T>
void seqlist<T>::reverse( )
{
   int i=0,j;
   T  tmp;
   for(i,j=_size-1;i<j;i++,j--)
{
        tmp=_data[i];  
        _data[i]=_data[j];
        _data[j]=tmp;
        }
}

//void Test1()
//{
// seqlist<int> s1;
// s1.PushBack(1);
// s1.PushBack(2);
// s1.PushBack(3);
// s1.PushBack(4);
// s1.Print();
//}
//void Test2()
//{
// seqlist<int> s1;
// s1.PopBack();
//}
//void Test3()
//{
// seqlist<int> s1;
// s1.PopFront();
//}
//void Test4()
//{
// seqlist<int> s1;
// s1.PushFront(1);
// s1.PushFront(2);
// s1.PushFront(3);
// s1.PushFront(4);
//
//template <typename T>
int main()
{
seqlist<int> s1;
s1.PushBack(1);
s1.PushBack(2);
s1.PushBack(3);
s1.PushBack(4);
s1.PopBack();
s1.Print();
s1.PushFront(5);
s1.Print();
s1.PopFront();
s1.Print();
s1.Insert(2,5);
s1.Print();
s1.Erase(2);
cout<<"wzzx"<<endl;
s1.Print();
s1.Find(2);
cout<<"wzzx2"<<endl;
          s1.reverse();
s1.Print();
 
return 0;
}
时间: 2024-08-11 07:41:12

c++ 模板实现顺序表的相关文章

模板实现顺序表

类模板的成员函数: 类模板的成员函数本身是一个普通函数.但是,类模板的每个实例都有其自己版本的成员函数.因此,类模板的成员函数具有和模板相同的模板参数.因此,在=定义在类模板之外的成员函数就必须以template开始,后跟类模板参数列表. 类模板中的友元函数: 类模板中的友元函数,应该在类中定义.若只在类中声明,在类外定义,则在链接时会出现错误. 类模板实现顺序表: "SeqList.h" //冒泡法 "test.cpp"

模板(顺序表与栈)

"顺序表与栈" 顺序表相对于我们来说已经不算是陌生的,顺序表有自己独有的特点,需要有一块独有的空间,访问中间的数据也较为简单,插入和删除数据就相对较难.针对顺序表的特点,我们不难想到一个数据结构"栈",栈的特点与顺序表相对来说很接近,栈的主要特点是"先进后出",即就是后进入栈的数据必须先出才能够访问到先前进入的数据,用顺序表来实现"栈"的一些基本功能更加合适. 这里首先提一下"模板"的概念,模板的一般形式为

用模板实现顺序表与单链表

//顺序表 #include<iostream> using namespace std; template<typename T> class SeqList { public: SeqList(); ~SeqList(); SeqList(const SeqList& s); SeqList& operator=(const SeqList &s); void _CheakCapacity(); void PushBack(const T& x)

链表模板、队列模板、顺序表模板、栈模板、

//利用容器适配器实现栈和队列 #pragma once #include<iostream> #include<string> #include<cassert> using namespace std; template<typename T> struct Node { public: Node(const T& d) :_next(NULL) , _prev(NULL)     ,_data(d){} T _data; Node<T&g

顺序表和链表的模板

c++引入模板是为了更好的代码复用,模板这边分为两个大块.        1.模板函数        2.模板类     我们今天来介绍模板类的应用-顺序表和链表(单链表为例)          //模板的顺序表          template<class T>     class SeqList     {     public:      SeqList()      :_array(NULL)      , _size(0)      , _capacity(0)      {}  

顺序表及其多种实现方式 --- C/C++

所谓顺序表,即线性表的顺序存储结构.下面给出的是数据结构---线性表的定义. ADT List{ 数据对象: 线性表的数据对象的集合为{a1,a2,a3,...,an},每个元素的类型为ElemType. 数据关系: 除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每个元素有且仅有一个直接后继元素. 数据元素之间的关系是一对一的关系. 基础操作: InitList(&L);  //构造一个空的线性表 DestroyList(&L); //销毁线性表 Clea

C++顺序表模板练习 以及 剖析易出现的浅拷贝问题

/* C++顺序表模板练习 以及 剖析易出现的浅拷贝问题 */ #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include <string> using namespace std; template <typename T> class SeqList { public: SeqList(); SeqList(const SeqList& s); ~SeqList(); void PushBac

C++模板实现动态顺序表(更深层次的深浅拷贝)与基于顺序表的简单栈的实现

前面介绍的模板有关知识大部分都是用顺序表来举例的,现在我们就专门用模板来实现顺序表,其中的很多操作都和之前没有多大区别,只是有几个比较重要的知识点需要做专门的详解. 1 #pragma once 2 #include<iostream> 3 #include<string> 4 #include<stdlib.h> 5 using namespace std; 6 7 template <class T> 8 class Vector 9 { 10 publ

动态顺序表 与 双向链表的模板类

//////////////////////////////////////////////////////////////////////// /////////////////////泛型编程之动态顺序表的模板///////////////////////// //////////////////////////////////////////////////////////////////////// #include<iostream> #include<string> u