『代码』··By/蜜汁炒酸奶

动态数组实现-C++

用链表实现的动态数组的插入、删除、查询等操作

头文件(array.h)

#ifdef ARRAY_H
#define ARRAY_H

class DynamicArray
{
public:
	DynamicArray(int alen=10,int *aData=NULL,int aSize=10):
	  m_alen(alen),m_aData(aData),m_aSize(aSize){};

	~DynamicArray(){};

	DynamicArray(const DynamicArray &aRef);

	void assign(const DynamicArray &aRef);// 用一个动态数组的对象的值去修改另外一个对象

	void append(int aValue);//添加

	bool remove(int aIndex); //删除下标为aIndex的数组元素

	bool insert( int aIndex, int aVal );//在aIndex位置的元素后面插入新元素

	bool remove(int aIndex, int aValue); //从下标为aIndex的元素开始查找,删除所有值为aValue的元素

	const int *begin() const; //返回第一个数组元素的指针
	const int *end() const; //返回最后一个元素的指针

	int at(const int aIndex) const; //返回下标为aIndex的数组元素

private:

	int m_alen;//已存的数组长度
	int m_aSize;//数组的存储空间长度
	int *m_aData;//数组首地址


};
#endif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

主函数(main.cpp)

/*
功能:动态数组
日期:2013-10-19
*/
#include <iostream>
#include "array.h"
using namespace std;

int main(void)
{
    DynamicArray arr1,arr2;
	int Num,Num2;
	cout<<"请输入数组元素的个数:";
	cin>>Num;
	arr1(Num);
	DynamicArray arr2(arr1);
	cout<<"请输入需要添加的元素";
	cin>>Num;
	arr2.append(Num);
	cout<<"请输入需要删除的元素下标:";
    cin>>Num;
	arr2.remove(Num);
    cout<<"请输入需要插入新元素的前一个下标及新元素的值:";
    cin>>Num>>Num2;
	arr2.insert(Num,Num2);
	cout<<"请输入需要寻找元素的起始下标以及删除的值:";
	cin>>Num>>Num2;
	arr2.remove(Num,Num2);
    cout<<"第一个数组元素的指针为:"<<arr2.begin()<<endl;
	cout<<"最后一个元素的指针为:"<<arr2.begin()<<endl;
	cout<<"请输入需要返回的数组元素的下标:"<<arr2.begin()<<endl;
	cin>>Num;
	cout<<"下标为"<<NULL<<"的数组元素为:"<<arr2.at(Num)<<endl;



	system("pause");
	return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

实现函数(array.cpp)

/*
功能:动态数组相关功能实现函数
日期:2013-10-19
*/
#include <iostream>
#include "array.h"
using namespace std;


DynamicArray::DynamicArray(int aSize)
{
	if(aSize<0)
	{
		cout<<"size 必须为 positive"<<"且size的值为 10"<<endl;
		aSize=10;
	}
	m_aData = new int [aSize];
	if (!m_aData)
	{
		exit(0);
	}
	m_aSize=aSize;
	m_alen=0;
};
DynamicArray::DynamicArray(const DynamicArray &aRef)
{
	int i,n;
	n = aRef.m_aSize;
	m_aSize = n;
	m_aData = new int[n];
	if (!m_aData)
	{
		exit(0);
	}
    m_aData = aRef.m_aData;
	for(int i=0;i<m_aSize;i++)
	{
		m_aData[i]=aRef.m_aData[i];

	}

}
// 用一个动态数组的对象的值去修改另外一个对象
void  DynamicArray::assign(const DynamicArray &aRef)
{
	int i;
	for(i=0;i<aRef.m_aSize;i++)
	{
        m_aData[i]=aRef.m_aData[i];
	}
}
//添加
void  DynamicArray::append(int aValue)
{
	if (m_alen == m_aSize)
	{
		m_aSize = new int (m_aSize+m_aSize)
	}
	 m_aData[m_alen] = aValue;
	 m_alen++;

}
//删除下标为aIndex的数组元素
bool  DynamicArray::remove(int aIndex)
{
	int i=0;
	for(i=aIndex;i<m_alen-1;i++)
	{
		m_aData[i] = m_aData[i+1];
	}
	m_alen--;

    return true;
}
//在aIndex位置的元素后面插入新元素
bool  DynamicArray::insert( int aIndex, int aVal )
{

	if (m_alen == m_aSize)
	{
		m_aSize+=m_aSize;
		m_aData = new int(m_aSize+=m_aSize);
		m_aData[m_aSize] = aVal;
		return true;
	}
	else
	{
		for (int i=aIndex;i<m_alen-1;i++)
		{
			int tmp = m_aData[i+1];
			m_aData[i+1] = aVal;
			aVal = tmp;
		}
		m_alen++;
		m_aData[m_alen] = aVal;
		return true;
	}

}
//从下标为aIndex的元素开始查找,删除所有值为aValue的元素
bool  DynamicArray::remove(int aIndex, int aValue)
{
    int i;
	for(i=aIndex;i<m_alen;i++)
	{
		if (m_aData[i] == aValue)
		{
			remove(i);
		}
	}
	return true;
}
//返回第一个数组元素的指针
const int * DynamicArray::begin() const
{
	return &m_aData;
}
//返回最后一个元素的指针
const int* DynamicArray::end() const
{
	return &m_aData[m_alen-1];
}
//返回下标为aIndex的数组元素
int  DynamicArray::at(const int aIndex) const
{
     return m_aData[aIndex];
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127

预览
Loading comments...
0 条评论

暂无数据

example
预览