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

本文介绍了一个使用C++模板实现的顺序表类,包括初始化、插入、删除、查找等基本操作,并通过实例展示了如何使用该顺序表类进行数据管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:https://blog.youkuaiyun.com/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

转载于:https://www.cnblogs.com/fourmi/p/8906147.html

使用c++实现顺序表:多文件编程,层次清晰,函数有注释 SeqList();//构造函数,存储的元素个数设为0 bool setLength(size_t length);//设置已经存储的元素个数 bool addElement(ElemType element);//把某个元素添加到顺序表末尾 bool addElement(ElemType element , size_t n);//插入一个元素,使其成为第n个元素,其余元素后移 bool delElement();//删除所有的元素 bool delElement(size_t n);//删除第n个元素 bool delElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,把这个元素删除 bool replaceElement(ElemType element , size_t n);//使用一个元素,替换掉第n个元素 bool swapElement(size_t n1 , size_t n2);//把第n1个元素和第n2个元素交换 ElemType* getElement();//得到数组头的指针 ElemType* getElement(size_t n);//得到第n个元素的指针 size_t getLength();//得到存储的元素个数 size_t getMaxSize();//得到顺序表容量 bool showElementDetail();//输出所有的元素细节 bool showElementDetail(size_t n);//输出第n个元素的细节 bool showElementDetail(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,输出元素所有细节 size_t findElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素位置 static int inputAInt(int min = 0,int max = 9,int defaultValue = -1);//从键盘读取,限制为一个min到max间的整数,非法情况返回defaultValue void startControlLoop();//打开控制界面 ~SeqList();//析构函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值