数据结构OJ习题

问题 A: 顺序表上的基本操作实现

题目描述
在顺序存储结构实现基本操作:初始化、创建、插入、删除、查找、遍历、逆置、合并运算。

输入
请输入线性表La的长度:n

a1 a2 a3 …an(数值有序,为降序)

请输入要插入到线性表La中的数字x和插入的位置i:x i

请输入要删除数字的位置:i

请输入要查找的数字:x

请输入线性表长度:m

b1 b2…bm(数值有序,为升序)

输出
插入一个数字后的线性表a1 a2…an+1

删除一个数字后的线性表a1 a2…an

查找一个输入的数字后如果找到,输出该数字的位置i,如果没有找到,输出"Not found"的信息。

逆置a1 a2…an后的线性表an an-1…a1

合并两个线性表后的线性表

样例输入
5
14 11 10 9 5
8 4
4
10
4
1 3 6 9

样例输出
14 11 10 8 9 5
14 11 10 9 5
3
5 9 10 11 14
1 3 5 6 9 9 10 11 14

#include 
#include 
#include 
#include 
#include 
using namespace std;
const int defaultSize = 100;
 
class SeqList
{
private:
    int* data;//指向动态内存分配数组的指针
    int maxSize;//动态内存分配数组的大小
    int last;//标识顺序表中最后一个元素的位置
    void Resize(int newSize);
public:
    SeqList(int sz=defaultSize);//构造函数
    ~SeqList();//析构函数
 
    int Size() const;//返回顺序表的容量
    int Length() const;//返回顺序表中元素的个数
    int Search(int x) const;//在顺序表中搜索x
    bool IsEmpty() const;//顺序表是否为空
    bool IsFull() const;//顺序表是否为满
    bool Insert(int i, int x) ;//在顺序表的第i个元素的位置插入x
    bool Remove(int i) ;//删除顺序表第i个位置的元素
    void Sort() ;//对顺序表中元素进行排序
    void Reverse ();//逆置顺序表中的元素
    void Print();
};
 
void SeqList::Print()
{
    for(int i=0;i<=last;i++)
        cout<<data[i]<<" ";
    cout<<endl;
}
 
void SeqList::Resize(int newSize)   //重置顺序表的容量
{
    if (newSize < 0)
    {
        cout << "顺序表的最大容量不能小于0!" << endl;
        exit(1);
    }
    if(newSize!=maxSize)
    {
        int* data2;
        if(newSize<maxSize)
            last=newSize-1;
        maxSize = newSize;
        data2 = new int[last+1];
        if(data2 == NULL)
        {
            cout << "动态分配内存失败!" << endl;
            exit(1);
        }
        for(int i=0; i<=last; i++)
            data2[i]=data[i];
        delete []data;
        data = new int[maxSize];
        if(data == NULL)
        {
            cout << "动态分配内存失败!" << endl;
            exit(1);
        }
        for(int i=0; i<=last; i++)
            data[i]=data2[i];
        delete []data2;
    }
}
 
SeqList::SeqList(int sz)  //构造函数
{
    if (sz < 0)
    {
        cout << "顺序表的最大容量不能小于0!" << endl;
        exit(1);
    }
    maxSize = sz;
    data = new int[maxSize];
    if(data == NULL)
    {
        cout << "动态分配内存失败!" << endl;
        exit(1);
    }
    last=-1;
}
 
SeqList::~SeqList() //析构函数
{
    delete []data;
}
 
int SeqList::Size()const    //返回顺序表的容量
{
    return maxSize;
}
 
int SeqList::Length()const  //返回顺序表中元素的个数
{
    return last+1;
}
 
int SeqList::Search(int x)const   //在元素表中搜索x
{
    for(int i=0; i<=last; i++)
    {
        if(data[i]==x)
            return i+1;
    }
    cout<<"Not found"<<endl;
    return 0;
}
 
bool SeqList::IsEmpty() const//顺序表是否为空
{
    return last==-1;
}
 
bool SeqList::IsFull() const//顺序表是否为满
{
    return last==maxSize-1;
}
 
bool SeqList::Insert(int i, int x) //在顺序表的第i个元素的位置插入x
{
    if((i<=0)||(i>last+2))
    {
        cout<<"无法插入"<<endl;
        return 0;
    }
    else if(last==maxSize-1)
        Resize(maxSize+1);
    for(int j=last; j>=(i-1); j--)
        data[j+1]=data[j];
    data[i-1]=x;
    last++;
    return 1;
}
 
bool SeqList::Remove(int i) //删除顺序表第i个位置的元素
{
    if((i<=0)||(i>last+1)||last==-1)
    {
        cout<<"无法删除"<<endl;
        return 0;
    }
    for(int j=(i-1); j<last; j++)
        data[j]=data[j+1];
    last--;
    return 1;
}
 
void SeqList::Sort() //对顺序表中元素进行排序
{
    for (int i = 0; i < last; i++)
    {
        int t=i;
        for (int j = i + 1; j <=last; j++)
        {
            if (data[t] > data[j])
                t = j;
        }
        int temp;
        temp = data[i];
        data[i] = data[t];
        data[t] = temp;
    }
}
 
void SeqList::Reverse ()//逆置顺序表中的元素
{
    int j=last;
    for(int i=0; i<j; i++,j--)
    {
        int tmp;
        tmp = data[i];
        data[i] = data [j];
        data[j] = tmp;
    }
}
 
int main()
{
    int n,m;
    cin>>n;
    SeqList seq(n);
    for(int i=1;i<=n;i++)
    {
        cin>>m;
        seq.Insert(i,m);
    }
    cin>>n>>m;
    seq.Insert(m,n);
    seq.Print();
    cin>>n;
    seq.Remove(n);
    seq.Print();
    cin>>m;
    m=seq.Search(m);
    if(m!=0)
        cout<<m<<endl;
    seq.Reverse();
    seq.Print();
    int l;
    cin>>n;
    l=seq.Length();
    for(int i=1;i<=n;i++)
    {
        cin>>m;
        seq.Insert(i+l-1,m);
    }
    seq.Sort();
    seq.Print();
    return 0;
}
 

你可能感兴趣的:(数据结构,数据结构)