数据结构C++实现代码-顺序表

参考:https://blog.csdn.net/ebowtang/article/details/43094041

//seqList.h//
//包含顺序表中的声明//

#include<iostream>
template<typename DataType>
class SeqList
{
public:
    SeqList(int size = defaultSize)
    {
        if (size > 0)
        {
            maxSize = size;
            length = 0;
            elements = new DataType[maxSize];
            for (int i = 0; i < maxSize; i++)
            {
                elements[i] = NULL;
            }

        }
        else
        {
            cout << "Error Length of SeqList!" << endl;

        }
    }
        ~SeqList()
        {
            //delete[] elements;
        }
        bool InsertElement(DataType data);
        DataType GetElement(int location);
        bool DelElement(int location);
        bool ChangeElement(int location, DataType data);
        bool PrintList();
        int FindElement(DataType data);
        bool isEmpty(SeqList L);
        bool InitList(int nLen);
        void ClearList(SeqList *L);
        void DestroyList();
        void ConverseList();
        int getLength()
        {
            return length;
        }
private:
    static const int defaultSize = 10;
    DataType *elements;
    int maxSize;
    int length;
};
//seqList.cpp//
//包含顺序表中主要函数功能的具体实现//
#include<iostream>
#include"seqList.h"
template <typename DataType>
bool SeqList<DataType>::InsertElement(DataType data)
{
    int curIndex = length;
    if (length >= maxSize)
    {
        return false;
    }
    else
    {
        elements[curIndex] = data;
        length++;
        return true;
    }
}

template <typename DataType>
bool SeqList<DataType>::InitList(int nLen)
{
    DataType nchar = 'A';
    for (int i = 0; i < nLen; i++)
    {
        InsertElement(nchar++);
    }
    return true;
}
template <typename DataType>
DataType SeqList<DataType>::GetElement(int location)
{
    if (location<0 || location>length)
    {
        std::cout << "参数无效" << std::endl;
        return 0;
    }
    else
    {
        return elements[location];
    }
}
template <typename DataType>
bool SeqList<DataType>::DelElement(int location)
{
    if (location<0 || location >length)
    {
        std::cout << "参数无效" << std::endl;
        return false;
    }
    else
    {
        int j = 0;
        for (int i = location; i < length; i++)
        {
            elements[location + j - 1] = elements[location + j];
            j++;
        }
        length--;
        return true;
    }
}
template <typename DataType>
bool SeqList<DataType>::ChangeElement(int location, DataType data)
{
    if (location<0 || location>length)
    {
        std::cout << "参数无效" << std::endl;
        return false;
    }
    else
    {
        elements[location - 1] = data;
        return true;
    }
}

template <typename DataType>
bool SeqList<DataType>::PrintList()
{
    for (int i = 0; i < length; i++)
        std::cout << GetElement(i) << " ";
    std::cout<< endl;
    return true;
}
template <typename DataType>
int SeqList<DataType>::FindElement(DataType data)
{
    for (int i = 0; i < length; i++)
    {
        if (elements[i] == data)
        {
            return i;
        }
    }
    std::cout << "没有更改元素" << std::endl;
    return 0;
}

template <typename DataType>
bool SeqList<DataType>::isEmpty(SeqList<DataType> L)
{
    if (L.length == 0)
        return true;
    else
        return false;
}
template <typename DataType>
void SeqList<DataType>::ClearList(SeqList *L)
{
    for (int i = 0; i < length; i++)
        elements[i] = 0;
    L->length = 0;
    L->maxSize = 0;
}
template <typename DataType>
void SeqList<DataType>::DestroyList()
{
    length = 0;
    maxSize = 0;
    delete[] elements;
    elements = NULL;
}
template <typename DataType>
void SeqList<DataType>::ConverseList()
{
    for (int i = 0; i < length / 2; i++)
    {
        DataType temp;
        temp = elements[i];
        elements[i] = elements[length - 1 - i];
        elements[length - i - 1] = temp;
    }
}
//main.cpp//
#include "seqList.cpp"
#include "windows.h"
using namespace std;
typedef char Mytype;
int main(int argc, char* argv[])
{
    int nLen = 0;
    cout << "请输入顺序表的长度: ";
    cin >> nLen;
    SeqList<Mytype>list(nLen);
    list.InitList(nLen);
    cout << "初始化后的内容为l(亲,萌妹纸自动帮您完成的哦!!!)" << endl;
    list.PrintList();
    int nPos = 0;
    cout << "你想删除的那个位置的元素(位置从1开始算起)";
    cin >> nPos;
    while (true)
    {
        if (nPos > list.getLength())
        {
            cout << "输入过大,重新输入(位置从1开始算起)" << endl;
            cin >> nPos;
        }
        else
        {
            break;
        }
    }
    list.DelElement(nPos);
    list.PrintList();
    cout << "现在顺序表的长度为: " << endl;
    cout << list.getLength() << endl;
    Mytype mchar = '0';
    int nPos1 = 0;
    char ans = 'n';
    do
    {
        cout << "请输入您想改变的指定位置和相应元素(示例:“k 5”)";
        cin >> mchar >> nPos1;
        list.ChangeElement(nPos1, mchar);
        cout << "继续修改?(Y/N)" << endl;
        cin >> ans;
    } while (ans == 'y' || ans == 'Y');
    cout << "更改后的顺序表为: " << endl;
    list.PrintList();
    cout << "执行逆序: " << endl;
    list.ConverseList();
    list.PrintList();
    Mytype bchar = '0';
    cout << "请输入您想查找的元素: ";
    cin >> bchar;
    int npos2 = list.FindElement(bchar);
    cout << "您查找的元素的位置为:" << endl;
    cout << npos2 << endl;
    list.ClearList(&list);
    if (list.isEmpty(list) == true)
    {
        cout << "顺序表已被清空" << endl;

    }
    else
    {
        cout << "顺序表还原元素" << endl;

    }
    cout << "5秒后执行销毁命令....................." << endl;
    Sleep(1000);
    cout << "4秒后执行销毁命令....................." << endl;
    Sleep(1000);
    cout << "3秒后执行销毁命令....................." << endl;
    Sleep(1000);
    cout << "2秒后执行销毁命令....................." << endl;
    Sleep(1000);
    cout << "1秒后执行销毁命令....................." << endl;
    Sleep(1000);
    cout << "再见,谢谢....................." << endl;
    list.DestroyList();
    system("PAUSE");
    return 0;
}

代码运行结果图:

2018-04-2211:13:09

posted @ 2018-04-22 11:14  fourmii  阅读(3205)  评论(0编辑  收藏  举报