数据结构顺序表操作C++


数据结构顺序表操作C++


#include <iostream>
#include<stdio.h>
using namespace std;
typedef int status;
const int MaxSize=150;

typedef struct//定义结构体
{
    int *elem;
    int length;
}SqList;
SqList L;//声明变量
void InitList_sq(SqList &L);//顺序表初始化
void ListLength(SqList &L); //顺序表的长度
void EmptyList(SqList &L);//判断顺序表是否为空
void ClearList(SqList &L);//顺序表的清空
void Illegal(SqList &L,int i);//判断输入的数字是否非法
void PointList(SqList &L,int i); //获取指定位置的顺序表元素
void BeforPoint(SqList &L,int i);//求顺序表的前驱
void AfterPoint(SqList &L,int i);//求顺序表的后继
void InsertList(SqList &L,int i,int x);//顺序表的插入
void InsertProcess(SqList &L,int i,int x);//在指定位置插入元素的过程
void DeleteList(SqList &L,int i);//删除指定位置的元素
void Display(SqList &L);//显示顺序表的数据
void Tips();//文字提示信息
int main()
{
    Tips();//文字提示信息
    InitList_sq(L);//初始化线性表
    int h,k,i;//h,k是指定的位置和插入的数据元素; i是输入的数字
    cout << "输入你要进行操作的相应数字:";
    cin>>i;
    while(true)
    {
        switch(i)//判断i的值
        {
        case 1:
            ClearList(L);//清空顺序表
            cout << "输入你要进行操作的相应数字:";
            cin>>i;
            break;
        case 2:
            EmptyList(L);//判断顺序表是否为空
            cout<<"输入你要进行操作的相应数字:";
            cin>>i;
            break;
        case 3:
            ListLength(L);//求顺序表的长度
            cout<<"输入你要进行操作的相应数字:";
            cin>>i;
            break;
        case 4:
            cout<<"输入指定位置:";
            cin>>h;
            PointList(L,h);//获取顺序表指定位置的元素
            cout<<"输入你要进行操作的相应数字:";
            cin>>i;
            break;
        case 5:
            cout<<"输入指定位置:";
            cin>>h;
            BeforPoint(L,h);//求前驱
            cout<<"输入你要进行操作的相应数字:";
            cin>>i;
            break;
        case 6:
            cout<<"输入指定位置:";
            cin>>h;
            AfterPoint(L,h);//求后继
            cout<<"输入你要进行操作的相应数字:";
            cin>>i;
            break;
        case 7:
            cout<<"输入指定位置:";
            cin>>h;
            cout<<"输入插入的数值:";
            cin>>k;
            InsertList(L,h,k);//在顺序表指定位置插入数据
            cout<<"输入你要进行操作的相应数字:";
            cin>>i;
            break;
        case 8:
            cout<<"输入指定位置:";
            cin>>h;
            DeleteList(L,h);//在顺序表的指定位置删除数据
            cout<<"输入你要进行操作的相应数字:";
            cin>>i;
            break;
        case 9:
            Display(L);//显示顺序表的元素
            cout<<"输入你要进行操作的相应数字:";
            cin>>i;
            break;
        case 10:
            Tips();//提示信息
            cout<<"输入你要进行操作的相应数字:";
            cin>>i;
            break;
        default:
            if(i <0)
                return 0;
            else
            {
                cout<<"输入数字非法,请重新输入:";
                cin>>i;
            }
            break;
        }
    }
    return 0;
}
void InitList_sq(SqList &L)//顺序表的初始化
{
    L.elem = new int[MaxSize];
    if(!L.elem)
        cout<<"不能正确初始化"<<endl;
    //return error;//exit(overflow);
    L.length = 0;

}

void ListLength(SqList &L) //顺序表的长度
{
    cout<<"顺序表的长度是:"<<L.length<<endl;
    //return ok;
}

void EmptyList(SqList &L)//判断顺序表是否为空
{
    if(L.length == 0)
    {
        cout<<"顺序表为空"<<endl;
    }
    else
    {
        cout<<"顺序表不为空"<<endl;
        ListLength(L);//输出顺序表的长度
    }
    //return ok;
}



void ClearList(SqList &L)//顺序表的清空
{
    if(L.length == 0)
    {
        cout<<"顺序表本身是空表"<<endl;
        //return error;
    }
    else
    {
        L.length = 0;
        cout<<"顺序表已经清空"<<endl;
        //return ok;
    }

}

void Illegal(SqList &L,int i)//判断输入的数字是否非法
{

    cout<<"输入的数字非法"<<endl;
    //return error;
}

void PointList(SqList &L,int i) //获取指定位置的顺序表元素
{
    if(i<=0 || i>L.length)
    {
        Illegal(L,i);
        //return error;
    }
    else
    {
        cout<<"指定位置的元素为:"<<L.elem[i-1]<<endl;
        //return ok;
    }

}

void BeforPoint(SqList &L,int i)//求顺序表的前驱
{

    if(i<=0 || i>L.length)
    {
        Illegal(L,i);
        //return error;
    }
    else if(i == 1)
    {
        cout<<"不存在前驱"<<endl;

    }
    else
    {
        cout<<"指定位置的前驱是:"<<L.elem[i-2]<<endl;
        //return ok;
    }


}

void AfterPoint(SqList &L,int i)//求顺序表的后继
{
    if(i<=0 || i>L.length)
    {
        Illegal(L,i);

        //return error;
    }
    else if(i == L.length)
    {
        cout<<"不存在后继"<<endl;
    }
    else
    {
        cout<<"指定位置的后继是:"<<L.elem[i]<<endl;
        //return ok;
    }

}

void InsertList(SqList &L,int i,int x)//顺序表的插入
{

    if(i<=0 || i>L.length+1)
    {
        Illegal(L,i);
        //return error;
    }
    else
    {
        InsertProcess(L,i,x);
    }
}

void InsertProcess(SqList &L,int i,int x)//在指定位置插入元素的过程
{
    for(int j=L.length-1; j>=i-1; j--)
        L.elem[j+1]=L.elem[j];
    L.elem[i-1]=x;
    ++L.length;
    cout<<"插入元素成功"<<endl;
}

void DeleteList(SqList &L,int i)//删除指定位置的元素
{
    if(i<=0 || i>L.length)
    {
        Illegal(L,i);
        //return error;
    }
    else
    {
        for(int j=i; j<=L.length; j++)
        {
            if(j==i)
            {
                L.elem[j-1] = NULL;
            }
            else
            {
                L.elem[j-2] = L.elem[j-1];
            }
        }
        --L.length;
        cout<<"删除元素成功"<<endl;
    }

}
void Display(SqList &L)//显示顺序表的数据
{
    if(L.length == 0)
    {
        cout<<"顺序表为空表"<<endl;
    }
    else
    {
        cout<<"顺序表的元素是:";
        for(int j=0; j<L.length; j++)
        {
            cout<<L.elem[j]<<",";
        }
        cout<<endl;
    }

}

void Tips()//文字提示信息
{
    cout<<"1812050190-高启浩" <<endl;
    cout << "1-----清空线性表" << endl;
    cout << "2-----判断线性表是否为空" << endl;
    cout << "3-----求线性表长度" << endl;
    cout << "4-----获取线性表指定位置元素" << endl;
    cout << "5-----求前驱" << endl;
    cout << "6-----求后继" << endl;
    cout << "7-----在线性表指定位置插入元素 "<< endl;
    cout << "8-----删除线性表指定位置元素" << endl;
    cout << "9-----显示线性表" << endl;
    cout << "10----显示提示信息"<< endl;
    cout << "   退出,输入一个负数!" << endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值