template <class T>
class SqList
{
public:
SqList();
~SqList();
void InputList();
void OutputList();
Status ListInsert_Sq(int i, T e);
Status ListDelete_Sq(int i, T &e);
private:
T *elem;
int length; //实际存放元素的个数
int listSize; //可以容纳的最大元素的个数
};
- 初始化及销毁
template <class T>
SqList<T>::SqList()
{
elem = new T[MAXSIZE];
length = 0;
listSize = MAXSIZE;
}
template <class T>
SqList<T>::~SqList()
{
delete[] elem;
}
- 插入元素
//在第i个元素之前插入元素
template <class T>
Status SqList<T>::ListInsert(int i, T e)
{
T *p;
if(i<1 || i>length+1)
{
return ERROR;
}
if(length >= listSize) //容量已满,申请扩容
{
T *newbase = new T[MAXSIZE*2];
if(!newbase)
{
return ERROR;
}
//复制操作
p = elem;
elem = newbase;
for(int i=0; i<length; i++)
{
elem[i] = p[i];
}
listSize = MAXSIZE*2;
}
T *q = &(elem[i-1]); //新插入节点位置,第i个元素对应下标为i-1;
for(p=(&elem[length-1]); p>=q; p--)
{
*(p+1) = *p;
}
*q = e;
++length;
return OK;
}
- 删除元素
//删除数组中第i个元素,并用e返回
template <class T>
Status SqList<T>::ListDelete(int i, T &e)
{
T *p, *q;
if(i<1 || i>length)
{
return ERROR;
}
p = &(elem[i-1]);
e = *p;
q = elem + length +1;
for(++p; p<=q; p++)
{
*(p-1) = *p;
}
--length;
return OK;
}
#include <iostream>
using namespace std;
const int OK = 1;
const int ERROR = 0;
const int MAXSIZE = 20;
typedef int Status;
template <class T>
class SqList
{
public:
SqList();
~SqList();
void InputList();
Status ListInsert(int i, T e);
Status ListDelete(int i, T &e);
void Display();
private:
T *elem;
int length; //实际存放元素的个数
int listSize; //可以容纳的最大元素的个数
};
template <class T>
SqList<T>::SqList()
{
elem = new T[MAXSIZE];
length = 0;
listSize = MAXSIZE;
}
template <class T>
SqList<T>::~SqList()
{
delete[] elem;
}
//在第i个元素之前插入元素
template <class T>
Status SqList<T>::ListInsert(int i, T e)
{
T *p;
if(i<1 || i>length+1)
{
return ERROR;
}
if(length >= listSize) //容量已满,申请扩容
{
T *newbase = new T[MAXSIZE*2];
if(!newbase)
{
return ERROR;
}
//复制操作
p = elem;
elem = newbase;
for(int i=0; i<length; i++)
{
elem[i] = p[i];
}
listSize = MAXSIZE*2;
}
T *q = &(elem[i-1]); //新插入节点位置,第i个元素对应下标为i-1;
for(p=(&elem[length-1]); p>=q; p--)
{
*(p+1) = *p;
}
*q = e;
++length;
return OK;
}
//删除数组中第i个元素,并用e返回
template <class T>
Status SqList<T>::ListDelete(int i, T &e)
{
T *p, *q;
if(i<1 || i>length)
{
return ERROR;
}
p = &(elem[i-1]);
e = *p;
q = elem + length +1;
for(++p; p<=q; p++)
{
*(p-1) = *p;
}
--length;
return OK;
}
template <class T>
void SqList<T>::Display()
{
for(int i=0; i<length; i++)
{
cout << elem[i] << " ";
}
cout << endl;
}
int main()
{
SqList<int> list1;
for(int i=0; i<10; i++)
{
list1.ListInsert(1, i);
}
list1.Display();
list1.ListInsert(10, 10);
list1.Display();
for(int i=0; i<5; i++)
{
int temp = 0;
list1.ListDelete(1, temp);
cout << "temp = " << temp <<endl;
}
list1.Display();
int a = 0;
list1.ListDelete(3, a);
cout << "a = " << a <<endl;
list1.Display();
return 0;
}
测试结果