#include<iostream>
using namespace std;
#define INC_SIZE 10
template<typename _Ty>
class seqlist
{
public:
seqlist(int sz=Defaultsize):size(0)
{
capacity = sz;
elem = new _Ty[capacity];
}
~seqlist()
{
delete []elem;
}
public:
bool inc()
{
capacity += INC_SIZE;
elem = (_Ty *)realloc(elem,sizeof(_Ty)*capacity);
//realloc 返回一个void*指针,需要重新
//定义一个指针,判断申请前后内存地址是否发生变化
if(elem == NULL)
{
capacity -= INC_SIZE;
return false;
}
return true;
}
/* void Inc()
{
capacity += INC_SIZE;
_Ty* myelem;
myelem = new _Ty[capacity];
for(int i=0; i<size; ++i)
{
myelem[i] = elem[i];
}
delete []elem;
elem = myelem;
}
*/
bool full()const
{
return size >= capacity;
}
bool empty()const
{
return size == 0;
}
void insert(const _Ty& x, int index)
{
if(index < 0 || index==size-1)
return;
if(full())
{
inc();
}
for(int i=size; i>index; --i)
{
elem[i] = elem[i-1];
}
elem[index] = x;
size++;
}
void push_back(const _Ty &x)
{
if(full())
inc();
elem[size++] = x;
}
void push_front(const _Ty &x)
{
if(full())
inc();
for(int i=size; i>0; --i)
elem[i] = elem[i-1];
elem[0] = x;
size++;
}
void pop_back()
{
size--;
}
void pop_front()
{
remove(0);
}
void remove(int pos)//pos从0开始
{
if(pos<0 || pos>size-1)
return;
for(int i=pos; i<size; ++i)
elem[i] = elem[i+1];
size--;
}
int find(const _Ty x)const
{
for(int i=0; i<size; ++i)
{
if(elem[i] == x)
{
//cout<<" i ="<<i<<endl;
return i;
}
}
// cout<<"Not find~~!"<<endl;
return -1;
}
bool iselem(const _Ty x)const//判断元素是否在此表中
{
if(find(x) == -1)
{
cout<<"x 不在seqlist中"<<endl;
return false;
}
cout<<"x在此seqlist中。"<<endl;
return true;
}
_Ty next(const _Ty &x)const
{
int i=find(x);
// i++;
if(i >= size-1)//最后一个元素的后继返回他自己
return elem[i];
cout<<elem[++i]<<endl;
return elem[i];
}
_Ty prior(const _Ty &x)const
{
int i=find(x);
if(i <= 0) //第一个元素的后继默认为他自己
return elem[i];
cout<<elem[--i]<<endl;
return elem[i];
}
void show()const
{
for(int i=0; i<size; ++i)
cout<<elem[i]<<" ";
cout<<endl;
}
_Ty getelem(const int pos)const
{
if(pos<0 || pos>size-1)
return false;
cout<<elem[pos]<<endl;
return elem[pos];
}
int getsize()const
{
cout<<"length="<<size<<endl;
return size;
}
void swap(_Ty &x,_Ty &y)
{
_Ty z;
z = x;
x = y;
y = z;
}
void sort()
{
for(int i=0; i<size; ++i)
{
int j = i+1;
for(; j<size; ++j)
{
if(elem[i] < elem[j])
swap(elem[i],elem[j]);
}
}
}
void clear()
{
size = 0;
}
private:
enum{Defaultsize = 10};
size_t capacity;
size_t size;
_Ty *elem;
};
//seqlist存储数据从0位置开始
void main()
{
seqlist<int> slt;
for(int i=0; i<9; ++i)
slt.insert(i+1,i);
slt.show();
slt.getsize();
slt.insert(10,9);
slt.insert(11,2);
slt.show();
/*
slt.remove(3);
slt.show();
slt.find(9);
slt.iselem(4);
slt.next(6);
slt.prior(6);
slt.getelem(4);
slt.length();
slt.push_back(19);
slt.push_front(23);
slt.show();
slt.pop_back();
slt.pop_front();
slt.show();
slt.sort();
slt.show();
slt.clear();
slt.show();
*/
}
顺序表的C++实现
最新推荐文章于 2022-11-22 17:37:18 发布