C++数据结构,写一种算法,从顺序表删除第i个元素开始的第k个元素

如题所述

#include <cstring>
#include <cassert>
#include <iostream>
using namespace std;

//定义的顺序表类
template <class T>
class SqList
{
private:
static const int MAX;
int count;
T data[MAX];
public:

SqList()
:count(0)
{

}

T& get(int idx)
{
assert(idx >= 0 && idx < count);
return data[idx];
}

SqList<T>& insert(int idx, T elem)
{
assert(count < MAX);
assert(idx >= 0 && idx <= count);

int i;
int j;
for(i = count - 1; i >=idx; i--)
data[i + 1] = data[i];
data[idx] = elem;
++count;
return *this;
}

T remove(int idx) //删除下标为idx的元素
{
assert(idx >=0 && idx < count);
int i;
int j;
T elem = data[idx];
for(i = idx; i < count - 1; i++)
data[i] = data[i + 1];
--count;
return elem;
}

T remove(int i, int k) //删除从下标i开始的第k个元素
{
return remove(i + k - 1);
}

SqList<T>& push(T elem)
{
return insert(count, elem);
}

SqList<T>& operator <<(T elem)
{
return push(elem);
}

T& operator[] (int idx)
{
return get(idx);
}

int capacity() const
{
return count;
}

void output() const
{
int i;
for(i = 0; i < count; i++)
cout << data[i] << " " << endl;
cout << endl;
}

};

template <class T>
const int SqList<T>::MAX = 20;

int main()
{

SqList<int> sq;
sq << 2 << 3 << 4 << 5;
sq.output();
sq.insert(1, 11);
sq.output();
cout << "删除了: " << sq.remove(1,3) << endl;
sq.output();
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-13
#include
<cstring>
#include
<cassert>
#include
<iostream>
using
namespace
std;
//定义的顺序表类
template
<class
T>
class
SqList
{
private:
static
const
int
MAX;
int
count;
T
data[MAX];
public:
SqList()
:count(0)
{
}
T&
get(int
idx)
{
assert(idx
>=
0
&&
idx
<
count);
return
data[idx];
}
SqList<T>&
insert(int
idx,
T
elem)
{
assert(count
<
MAX);
assert(idx
>=
0
&&
idx
<=
count);
int
i;
int
j;
for(i
=
count
-
1;
i
>=idx;
i--)
data[i
+
1]
=
data[i];
data[idx]
=
elem;
++count;
return
*this;
}
T
remove(int
idx)
//删除下标为idx的元素
{
assert(idx
>=0
&&
idx
<
count);
int
i;
int
j;
T
elem
=
data[idx];
for(i
=
idx;
i
<
count
-
1;
i++)
data[i]
=
data[i
+
1];
--count;
return
elem;
}
T
remove(int
i,
int
k)
//删除从下标i开始的第k个元素
{
return
remove(i
+
k
-
1);
}
SqList<T>&
push(T
elem)
{
return
insert(count,
elem);
}
SqList<T>&
operator
<<(T
elem)
{
return
push(elem);
}
T&
operator[]
(int
idx)
{
return
get(idx);
}
int
capacity()
const
{
return
count;
}
void
output()
const
{
int
i;
for(i
=
0;
i
<
count;
i++)
cout
<<
data[i]
<<
"
"
<<
endl;
cout
<<
endl;
}
};
template
<class
T>
const
int
SqList<T>::MAX
=
20;
int
main()
{
SqList<int>
sq;
sq
<<
2
<<
3
<<
4
<<
5;
sq.output();
sq.insert(1,
11);
sq.output();
cout
<<
"删除了:
"
<<
sq.remove(1,3)
<<
endl;
sq.output();
return
0;
}