为了账号安全,请及时绑定邮箱和手机立即绑定

手写模板类 - 底层数组,有序。理论没错,简单测试过了,大家觉得有问题可以提一下

#pragma once

#include <iostream>


using namespace std;


template <typename T>

class MyList {

public :

MyList(int _size = 32); // 构造一个线性表,默认32位    数组底层,有序

~MyList();// 销毁线性表

void clearList(); // 清空线性表

bool listEmpty(); // 判空

int listLength(); // 线性表实际大小

int locateElem(T &elem); // 返回第一个满足elem的数组的元素位置

void travelList(); // 遍历数组


bool isIndexArr(int index); //判断index是否越界

void expend(); // 扩容


bool getElemPrior(T &current, int index ,T &proir); // 获取指定下标的前驱(上一个位置的值)

bool getElem(T &elem,int index); // 获取指定下标的值,返回获取的值

bool getElemNext(T &current, int index, T &next); // 获取指定下标的后继(下一个位置的值)


bool insertElem(T &elem, int index); // 向指定位置插入元素,如果线性表满,则扩从 N*2+1

bool deleteElem(T &elem, int index); // 删除指定位置元素,并返回一个被删除的值


private :

T *myList; // 线性表

int size; //线性表容量

int length; //线性表实际大小

};



template <typename T>

MyList<T>::MyList(int _size) {

size = _size;

myList = new T[_size];

clearList();

} // 构造一个线性表,默认32位    数组底层,有序


template <typename T>

MyList<T>::~MyList(){  

delete []myList;

myList = NULL;

}// 销毁线性表


template <typename T>

void MyList<T>::clearList(){   

length = 0;

} // 清空线性表


template <typename T>

bool MyList<T>::listEmpty(){  

return 0 == length ? true : false;

} // 判空


template <typename T>

int MyList<T>::listLength(){  

return length;

} // 线性表实际大小


template <typename T>

int MyList<T>::locateElem(T &elem){  

for (int i = 0; i < length; i++) {

if (myList[i] == elem)

return i;

}

return -1;

} // 返回第一个满足elem的数组的元素位置 


template <typename T>

void MyList<T>::travelList() {

if (listEmpty())

return;

for (int i = 0; i < length; i++)

cout << myList[i];

} // 遍历数组




template <typename T>

bool MyList<T>::isIndexArr(int index) {

return index >= length||index <0 ? true : false;

} //判断index是否越界


template <typename T>

void MyList<T>::expend() {

if (length < size)

return;

T *cacheList = myList;

myList = new T[size << 1 + 1];

for (int i = 0; i < length; i++)

myList[i] = cacheList[i];

delete[]cacheList;

cacheList = NULL;

} // 扩容



template <typename T>

bool MyList<T>::getElemPrior(T &current, int index, T &proir){   

if (isIndexArr(index))

return false;

current = myList[index];

0 == index ? proir = NULL : proir = myList[index - 1];

return true;

} // 获取指定下标的前驱(上一个位置的值)


template <typename T>

bool MyList<T>::getElem(T &elem, int index){

if (isIndexArr(index))

return false;

elem = myList[index];

return true;

} // 获取指定下标的值,返回获取的值


template <typename T>

bool MyList<T>::getElemNext(T &current, int index, T &next){

if (isIndexArr(index))

return false;

current = myList[index];

index == length - 1 ? next = NULL : next = myList[index + 1];

return true;

} // 获取指定下标的后继(下一个位置的值)




template <typename T>

bool MyList<T>::insertElem(T &elem, int index){

if (index > length)

return false;

expend();

for (int i = size - 1; i > index; i--)

myList[i] = myList[i - 1];

myList[index] = elem;

length++;

return true;

} // 向指定位置插入元素, - 如果线性表满,则扩从 N*2+1


template <typename T>

bool MyList<T>::deleteElem(T &elem, int index){

if (isIndexArr(index))

return false;

elem = myList[index];

for (int i = index; i < length - 1; i++) 

myList[i] = myList[i+1];

length--;

return true;

} // 删除指定位置元素,并返回一个被删除的值


正在回答

1 回答

newbee

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

手写模板类 - 底层数组,有序。理论没错,简单测试过了,大家觉得有问题可以提一下

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信