为了加深大家对C++的理解,我们还是继续通过实践的方式,今天,我们一起写一个顺序表,具体代码如下。
Seqlist.h具体内容如下:
- const int DefaultSize = 100;
- template <typename Type> class SeqList{
- public:
- SeqList(int sz = DefaultSize)
- :m_nmaxsize(sz), m_ncurrentsize(-1){
- if (sz > 0){
- m_elements = new Type[m_nmaxsize];
- }
- }
- ~SeqList(){
- delete[] m_elements;
- }
- int Length() const{ //get the length
- return m_ncurrentsize + 1;
- }
- int Find(Type x) const; //find the position of x
- int IsElement(Type x) const; //is it in the list
- int Insert(Type x, int i); //insert data
- int Remove(Type x); //delete data
- int IsEmpty(){
- return m_ncurrentsize == -1;
- }
- int IsFull(){
- return m_ncurrentsize == m_nmaxsize - 1;
- }
- Type Get(int i){ //get the ith data
- return i<0 || i>m_ncurrentsize ? (cout << "can't find the element" << endl, 0) : m_elements[i];
- }
- void Print();
- private:
- Type *m_elements;
- const int m_nmaxsize;
- int m_ncurrentsize;
- };
- template <typename Type> int SeqList<Type>::Find(Type x) const{
- for (int i = 0; i < m_ncurrentsize; i++)
- if (m_elements[i] == x)
- return i;
- cout << "can't find the element you want to find" << endl;
- return -1;
- }
- template <typename Type> int SeqList<Type>::IsElement(Type x) const{
- if (Find(x) == -1)
- return 0;
- return 1;
- }
- template <typename Type> int SeqList<Type>::Insert(Type x, int i){
- if (i<0 || i>m_ncurrentsize + 1 || m_ncurrentsize == m_nmaxsize - 1){
- cout << "the operate is illegal" << endl;
- return 0;
- }
- m_ncurrentsize++;
- for (int j = m_ncurrentsize; j > i; j--){
- m_elements[j] = m_elements[j - 1];
- }
- m_elements[i] = x;
- return 1;
- }
- template <typename Type> int SeqList<Type>::Remove(Type x){
- int size = m_ncurrentsize;
- for (int i = 0; i < m_ncurrentsize;){
- if (m_elements[i] == x){
- for (int j = i; j < m_ncurrentsize; j++){
- m_elements[j] = m_elements[j + 1];
- }
- m_ncurrentsize--;
- continue;
- }
- i++;
- }
- if (size == m_ncurrentsize){
- cout << "can't find the element you want to remove" << endl;
- return 0;
- }
- return 1;
- }
- template <typename Type> void SeqList<Type>::Print(){
- for (int i = 0; i <= m_ncurrentsize; i++)
- cout << i + 1 << ":\t" << m_elements[i] << endl;
- cout << endl << endl;
- }
- #include <iostream>
- #include "SeqList.h"
- using namespace std;
- int main()
- {
- SeqList<int> test(15);
- int array[15] = { 2, 5, 8, 1, 9, 9, 7, 6, 4, 3, 2, 9, 7, 7, 9 };
- for (int i = 0; i < 15; i++){
- test.Insert(array[i], 0);
- }
- test.Insert(1, 0);
- cout << (test.Find(0) ? "can't be found " : "Be found ") << 0 << endl << endl;
- test.Remove(7);
- test.Print();
- test.Remove(9);
- test.Print();
- test.Remove(0);
- test.Print();
- cin.get();
- return 0;
- }
图1 运行效果