您的位置:首页 > 其它

arrlist

2015-07-22 21:59 232 查看
/* 1. 插入删除等位置参数指数组下标
* 2. 判断条件有:表是否已满; 位置是否合法 */

#ifndef	LIST_H
#define	LIST_H

#include	<iostream>
using namespace std;

template <class T>
class arrList {
private:
T* 	aList;
int	maxSize;
int	curLen;
int	position;

public:
arrList(const int size) {
maxSize = size;
aList = new T[maxSize];
curLen = position = 0;
cout<<"new empty list!"<<endl;
}

~arrList() {
delete [] aList;
}

void print() {
for (int i = 0; i < curLen; i++)
cout<<aList[i]<<" ";
cout<<endl;
}

void clear() {
delete [] aList;
curLen = position = 0;
aList = new T[maxSize];
cout<<"list has been cleared!"<<endl;
}

bool isEmpty() {
if (curLen == 0) {
cout<<"list is empty!"<<endl;
return true;
}

return false;
}

int length() {
return curLen;
}

bool getValue(const int p, T& value);
bool setValue(const int p, const T value);
bool getPos(int& p, const T value);
bool append(const T value);
bool insert(const int p, const T value);
bool deletee(const int p);
};

template<class T>
bool arrList<T>::getValue(const int p, T& value) {
if (p < 0 || p >= curLen) {
cout<<"illegal getvalue!"<<endl;
return false;
}

value = aList[p];

return true;
}

//only can set list[0] - list[curLen-1]
template<class T>
bool arrList<T>::setValue(const int p, const T value) {
if (p < 0 || p >= curLen) {
cout<<"illegal setvalue!"<<endl;
return false;
}

aList[p] = value;

return true;
}

// return array subscript
template<class T>
bool arrList<T>::getPos(int& p, const T value) {
for (int i = 0; i < curLen; i++)
if (value == aList[i]) {
p = i;
return true;
}

return false;
}

template<class T>
bool arrList<T>::append(const T value) {
if (curLen >= maxSize) {
cout<<"The list is overflow!"<<endl;
return false;
}

aList[curLen++] = value;

return true;
}

/* 1. if list not full, can insert
* 2. if insertion legal, can insert
* 3. from last to insertion, array elements move to next position
* 4. insert */
template<class T>
bool arrList<T>::insert(const int p, const T value) {
if (curLen >= maxSize) {
cout<<"list is overflow!"<<endl;
return false;
}

if (p < 0 || p > curLen) {
cout<<"Insertion point is illegal!"<<endl;
return false;
}

for (int i = curLen; i > p; i--)
aList[i] = aList[i-1];
aList[p] = value;

curLen++;

return true;
}

/* 1. if list is empty, cann't delete
* 2. if deletion illegal, cann't delete
* 3. delete:from deletion to last, array elements move forward one */
template<class T>
bool arrList<T>::deletee(const int p) {
if (curLen <= 0) {
cout<<"No element to delete!"<<endl;
return false;
}

if (p < 0 || p > curLen-1) {
cout<<"deletion is illegal!"<<endl;
return false;
}

for (int i = p; i < curLen-1; i++)
aList[i] = aList[i+1];

curLen--;

return true;
}

#endif

#include	<iostream>
#include	"arrlist.h"
using namespace std;

int
main() {
arrList<int> list(10);

cout<<"The list is "<<(list.isEmpty()?"empty":"not empty")<<endl<<endl;

cout<<"init list 0-4"<<endl;
for (int i = 0; i < 5; i++)
list.append(i);
cout<<"The list is "<<(list.isEmpty()?"empty":"not empty")<<endl;
cout<<"print the list:"<<endl;
list.print();
cout<<endl;

cout<<"insert(0,5) (3, 5) (7, 5) (9, 5) (-3, 0)"<<endl;
list.insert(0, 5);
list.insert(3, 5);
list.insert(7, 5);
list.insert(9, 5);
list.insert(-3, 0);
list.print();
cout<<endl;

cout<<"setvalue(4, 5) (-4, 5) (33, 5)"<<endl;
list.setValue(4, 5);
list.setValue(-4, 5);
list.setValue(33, 5);
list.print();
cout<<endl;

cout<<"getvalue 0-curLen"<<endl;
int v;
for (int i = 0; i < list.length(); i++) {
list.getValue(i, v);
cout<<v<<" ";
}
cout<<endl;

cout<<"getpos 5,4"<<endl;
int p;
list.getPos(p, 5);
cout<<p<<" ";
list.getPos(p, 4);
cout<<p<<endl<<endl;

cout<<"delete 0, -3, 9"<<endl;
list.deletee(0);
list.print();
list.deletee(-3);
list.deletee(9);
cout<<endl;

list.clear();
list.isEmpty();

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: