VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 937|回复: 1

数据结构线性表问题,望高手解,谢谢

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-3-22 19:30:01 | 显示全部楼层 |阅读模式
数据结构中如何在线性表末尾追加元素  
请各位高手帮忙解答
谢谢
回复

使用道具 举报

0

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-7-8 07:30:02 | 显示全部楼层
//给你一个现成的作参考
/*==========================================================
*********************线性表类及其实现***********************
==========================================================*/
#ifndef _LINEARLIST_H_
#define _LINEARLIST_H_
//---------------------------------------------------------
#include <exception>
#include <iostream>
using namespace std;

//类定义
template<class T>
class LinearList   
{
public:
        LinearList(int MaxListSize = 10); //构造函数
        ~LinearList(){delete [] element;} //析构函数
        bool IsEmpty() const {return length == 0;}
        int Length() const {return length;}
        bool Find(int k, T& x) const; //返回第k个元素至x中
        int Search(const T& x) const; // 返回x所在位置
        LinearList<T>& Delete(int k, T& x); // 删除第k个元素并将它返回至x中
        LinearList<T>& Insert(int k, const T& x); // 在第k个元素之后插入x
        void Output(ostream& out) const;
private:
        int length;
        int MaxSize;
        T *element; // 一维动态数组


        //自定义的异常处理类
public:
        class NoMem:public std::exception
        {
        public:
                virtual const char* what() const throw()
                {
                        return "there is no memory!";
                }
        };

        class OutOfBounds:public std::exception
        {
        public:
                virtual const char* what() const throw()
                {
                        return "out of bound!";
                }
        };
};

template<class T>
LinearList<T>::LinearList(int MaxListSize)
{                // 基于公式的线性表的构造函数
        MaxSize = MaxListSize;
        element = new T[MaxSize];
        length = 0;
}
//--------------------------------------------------------------

template<class T>
bool LinearList<T>::Find(int k, T& x) const
{                        //把第k个元素取至x中
                //如果不存在第k个元素则返回false,否则返回true
        if ( k < 1 || k > length )
                return false; // 不存在第k个元素
        x = element[k-1];
        return true;
}
//----------------------------------------------------------------
template<class T>
int LinearList<T>::Search(const T& x) const
{                // 查找x,如果找到,则返回x所在的位置
                // 如果x不在表中,则返回0
        for (int i = 0; i < length; i++)
        if (element[i] == x)
                return ++i;
        return 0;
}

//----------------------------------------------------------------
template<class T>
LinearList<T>& LinearList<T>::Delete(int k, T& x)
{                // 把第k个元素放入x中,然后删除第k个元素
                // 如果不存在第k个元素,则引发异常OutOfBounds
        if(Find(k, x))
        {// 把元素k+l, ...向前移动一个位置
        for (int i = k; i < length; i++)
                element[i-1] = element[i];
        length-- ;
        return *this;
        }
        else throw OutOfBounds();
}
//----------------------------------------------------------------
template<class T>
LinearList<T>& LinearList<T>::Insert(int k, const T& x)
{                // 在第k个元素之后插入x
                // 如果不存在第k个元素,则引发异常OutOfBoun d s
                // 如果表已经满,则引发异常NoMem
        if ( k < 0 || k > length) throw OutOfBounds();  
        if (length == MaxSize) throw NoMem();
                //向后移动一个位置
        for (int i = length-1; i >= k; i--)
                element[i+1] = element[i];
        element[k] = x;
        length++ ;
return *this;
}

//---------------------------------------------------------------
template<class T>
void LinearList<T>::Output(ostream& out) const
{        //把表输送至输出流
        for (int i = 0; i < length; i++)
                out<<element[i]<< " ";
}
//---------------------------------------------------------------
// 重载<<

template <class T>
ostream& operator<<(ostream& out, const LinearList<T>& x)
{
        x.Output(out);
        return out;
}

//---------------------------end--------------------------------

#endif
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表