数据结构|顺序表|编程实现

本文详细介绍了如何使用C++编程实现顺序表,包括初始化、输入数据、输出、查找元素、插入、删除单个元素和合并两个顺序表的功能
摘要由CSDN通过智能技术生成

编程实现c++顺序表

主要功能
初始化查找插入删除合并
代码
#include <iostream>
using namespace std;
#define MaxSize 100

typedef struct//封装顺序表
{
    int *data;//也可int data[MaxSize];
    int length;
}SXList;

bool InitList(SXList &L){//顺序表的初始化
    L.data=new int[MaxSize];//动态数组
    if(L.data==NULL)
        return false;
    L.length=0;
    return true;
}

void Input(SXList &L,int n){//输入n个数据给顺序表
    if(n>MaxSize)
        cout<<"超出容量!"<<endl;
    for(int i=0;i<n;i++){
        cin>>L.data[i];
    }
    L.length=n;
}

void Output(SXList L){//顺序表的输出length个数据
    cout<<"存储数据如下:"<<endl;
    for(int i=0;i<L.length;i++){
        cout<<L.data[i]<<" ";
    }
}

int Find(SXList L,int n){//取第i个位置的元素
    if(n<=0||n>L.length)
        cout<<"该位置没有数据"<<endl;
    return L.data[n-1];
}

bool Insert(SXList &L,int n,int m){//插入
    if(L.length>MaxSize){
        cout<<"空间不足!"<<endl;
        return false;
    }
    if(n>L.length+1||n<=0){
        cout<<"插入位置错误!"<<endl;
        return false;
    }
    for(int i=L.length-1;i>=n-1;i--){
        L.data[i+1]=L.data[i];
    }
    L.data[n-1]=m;
    L.length++;
    return true;
}

void Delete1(SXList &L,int n){//删除某一元素
    int m=L.length;
    for(int i=0;i<L.length;i++){
        if(L.data[i]==n)
            L.length--;
    }
    if(L.length==m)
        cout<<"顺序表中没有该元素!"<<endl;
    for(int i=0;i<m;i++){
        if(L.data[i]==n){
            for(int j=i;j<m-1;j++){
                L.data[j]=L.data[j+1];
            }
        }
    }
}

bool Delete2(SXList &L,int n){//删除某位置的元素
    if(n>L.length||n<=0){
        cout<<"该位置没有元素!"<<endl;
        return false;
    }
    for(int i=n-1;i<L.length-1;i++){
        L.data[i]=L.data[i+1];
    }
    L.length--;
    return true;
}

void Merge(SXList &L1,SXList L2){//合并两个顺序表
    int n=L1.length;
    L1.length+=L2.length;
    for(int i=n;i<L1.length;i++){
        L1.data[i]=L2.data[i-n];
    }
}

int main(){
    int c;
    do{
        SXList L1,L2;
        cout<<endl;
        cout<<"\t 1顺序表的初始化"<<endl;
        cout<<"\t 2顺序表的输入"<<endl;
        cout<<"\t 3顺序表的输出"<<endl;
        cout<<"\t 4顺序表的位置查找"<<endl;
        cout<<"\t 5顺序表的位置插入"<<endl;
        cout<<"\t 6顺序表删除某个元素"<<endl;
        cout<<"\t 7顺序表的按位置删除"<<endl;
        cout<<"\t 8两个有序表的合并"<<endl;
        cout<<"\t 0退出操作"<<endl;
        cin>>c;
        if(c==1)
            InitList(L1);
        else if(c==2){
            int n;
            cout<<"请输入数据:"<<endl;
            cin>>n;
            Input(L1,n);
        }
        else if(c==3){
            Output(L1);
        }
        else if(c==4){
            cout<<"请输入需要查找的元素位置:"<<endl;
            int n;
            cin>>n;
            cout<<"在第"<<n<<"位的元素为:"<<endl;
            cout<<Find(L1,n)<<endl;
        }
        else if(c==5){
            cout<<"请输入插入的位置及数据:"<<endl;
            int n,m;
            cin>>n>>m;
            Insert(L1,n,m);
        }
        else if(c==6){
            int n;
            cout<<"请输入想要删除的元素:"<<endl;
            cin>>n;
            Delete1(L1,n);
        }
        else if(c==7){
            int n;
            cout<<"请输入删除的位置:"<<endl;
            cin>>n;
            Delete2(L1,n);
        }
        else if(c==8){
            cout<<"请输入想要合并的另一个顺序表:"<<endl;
            InitList(L2);
            int n;
            cin>>n;
            Input(L2,n);
            Merge(L1,L2);
        }
    }
    while(c!=0);
    return 0;
}
效果实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值