说明:代码是可以运行的,但是发表在博客上后复制到编译器里面报N多错误,找了半天原因是网页里面生成了一些空白字符,这些字符编译器无法识别。

因此使用了2种插入格式插入代码。

第二个带注释解释的代码不可复制,最上面折叠不带注释的代码复制后可以正常编译运行。

#include <iostream>
#include<cstdlib>
#include<string>
#include<iomanip>

using namespace std;

const int defaultsize = 100;

template <typename T>
class seqlist
{
public:
    seqlist(int size = defaultsize);
    seqlist(seqlist<T> &);
    ~seqlist();

//function
    int lengthlist(void);
    int listsize(void);
    int searchlist(T i);
    bool getdata(int i, T & t);
    bool setdata(int i, T t);
    bool insertdate(T t);
    bool removedate(int i, T & t);
    bool isempty(void);
    bool isfull(void);
    void sortlist(void);

private:
    T * lists;
    int maxsize;
    int last;
};

template <typename T>
seqlist<T>::seqlist(int size)
{
    if (size > 0)
    {
        maxsize = size;
        last = -1;
        lists = new T[size];
        if (lists == NULL)
        {
            cout << "fatal error:can NOT allocate memory!" << endl;
            exit(-1);
        }
    }
    else
        cout << "incorrect size!" << endl;
}

template <typename T>
seqlist<T>::seqlist(seqlist<T> &p)
{
    maxsize = p.listsize();
    last = p.lengthlist() - 1;
    lists = new T[maxsize];
    if (lists == NULL)
    {
        cout << "memory error." << endl;
        exit(-1);
    }
    for (int i = 0; i <= last; i++)
    {
        lists[i] = p.lists[i];
    }
}

template <typename T>
seqlist<T>::~seqlist()
{
    cout << "free memory." << endl;
    delete [] lists;
}

template <typename T>
int seqlist<T>::lengthlist(void)
{
    return last + 1;
}

template <typename T>
int seqlist<T>::listsize(void)
{
    return maxsize;
}

template <typename T>
int seqlist<T>::searchlist(T t)
{
    if (!isempty())
    {
        cout << "search data=" << t << endl;
        for (int i = 0; i <= last; i++)
            if (t - lists[i] < 0.00000001)
                return i + 1;
    }
    return -1;
}

template <typename T>
bool seqlist<T>::getdata(int i, T & t)
{
    if (i > 0 && i <= last + 1)
    {
        t = lists[i - 1];
        return true;
    }
    else
        return false;
}

template <typename T>
bool seqlist<T>::setdata(int i, T t)
{
    if (i >= 1 && i <= last + 1)
    {
        lists[i - 1] = t;
        return true;
    }
    else
        return false;
}

template <typename T>
bool seqlist<T>::insertdate(T t)
{
    if (isfull())
    {
        cout << "The lists is full!" << endl;
        return false;
    }
    else
    {
        lists[last + 1] = t;
        last++;
        return true;
    }
}

template <typename T>
bool seqlist<T>::removedate(int i, T & t)
{
    if (isempty())
    {
        cout << "the lists is empty!" << endl;
        return false;
    }
    else if (i > 0 && i <= last + 1)
    {
        t = lists[i - 1];
        for (int j = i; j <= last + 1; j++)
            lists[j - 1] = lists[j];
        last--;
        return true;
    }
    else
    {
        cout << "incorrect number!" << endl;
        return false;
    }
}

template <typename T>
bool seqlist<T>::isempty(void)
{
//   cout << "last" << last << endl;
    return (last == -1) ? true : false;
}

template <typename T>
bool seqlist<T>::isfull(void)
{
    return (last == maxsize - 1) ? true : false;
}

template <typename T>
void seqlist<T>::sortlist(void)
{
    if (isempty())
        cout << "lists do not need to sort." << endl;
    else
        for (int i = 0; i < last; i++)
        {
            int k = i;
            for (int j = i + 1; j < last + 1; j++)
                if (lists[j] < lists [k])
                    k = j;
            if (k != i)
            {
                T temp = lists[i];
                lists[i] = lists[k];
                lists[k] = temp;
            }
        }
}

int main(void)
{
    int x1 = 0, x2 = 0 , x3 = 42 ;
    double y1 = 97.2775, y2 = 0, y3 = 0 ;
    bool status;

    seqlist<int> seq1(30);
    for (int i = 0; i < 30; i++)
        seq1.insertdate(rand() % 998);
    cout << "排序前:" << endl;
    for (int i = 0; i < 30; i++)
    {
        seq1.getdata(i + 1, x2);
        cout.fill('0');
        cout << "list[" << setw(2) << i + 1 << "]=" << setw(3) << x2 << "  ";
        if ((i + 1) % 5 == 0)
            cout << endl;
    }
    seq1.sortlist();
    cout << endl;
    cout << "排序后:" << endl;
    for (int i = 0; i < 30; i++)
    {
        seq1.getdata(i + 1, x2);
        cout.fill('0');
        cout << "list[" << setw(2) << i + 1 << "]=" << setw(3) << x2 << "  ";
        if ((i + 1) % 5 == 0)
            cout << endl;
    }
    cout << endl;
    x1 = seq1.listsize();
    cout << "lists seq1 size:" << x1 << endl;
    status = seq1.isempty();
    if (!status)
        cout << "lists seq1 is not empty." << endl;

    x1 = seq1.lengthlist();
    cout << "lists seq1 length:" << x1 << endl;
    x1 = seq1.searchlist(x3);
    cout << "lists seq1 search:" << x1 << endl;

    cout << endl << endl;
    cout << "building seq2." << endl;
    seqlist<double> seq2(30);
    for (int i = 0; i < 30; i++)
        seq2.insertdate(rand() / (double)(RAND_MAX / 100));

    status = seq2.isfull();
    if (status)
        cout << "lists seq2 is full." << endl;
    cout << endl;

    for (int i = 0; i < 20; i++)
    {
        seq2.getdata(i + 1, y2);
        cout << "list[" << setw(2) << i + 1 << "]=" << setw(7) << y2 << "  ";
        if ((i + 1) % 5 == 0)
            cout << endl;
    }

    cout << endl;

    x1 = seq2.lengthlist();
    cout << "lists seq2 length:" << x1 << endl;

    x1 = seq2.searchlist(y1);
    cout << "lists seq2 search:" << x1 << endl;

    seq2.setdata(7, 99);
    seq2.getdata(7, y2);
    cout << "seq2 setdata=" << y2 << endl;

    seq2.removedate(7, y3);
    cout << "remove data=" << y3 << endl;
    cout << endl;
    for (int i = 0; i < 19; i++)
    {
        seq2.getdata(i + 1, y2);
        cout << "list[" << setw(2) << i + 1 << "]=" << setw(7) << y2 << "  ";
        if ((i + 1) % 5 == 0)
            cout << endl;
    }

    cout << endl;
    cout << endl;

    seqlist<int> seq3(seq1);
    for (int i = 0; i < 30; i++)
    {
        seq1.getdata(i + 1, x2);
        cout.fill('0');
        cout << "list[" << setw(2) << i + 1 << "]=" << setw(3) << x2 << "  ";
        if ((i + 1) % 5 == 0)
            cout << endl;
    }

    return 0;
}
View Code

相关文章:

  • 2021-07-30
  • 2021-07-16
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-22
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-10-09
  • 2021-09-17
  • 2021-07-30
  • 2021-10-21
  • 2022-12-23
  • 2022-01-02
相关资源
相似解决方案