数据结构顺序表(作业)

#include <bits/stdc++.h>

#define maxn 100005

typedef int ElemType;

using namespace std;

struct SqList
{
    ElemType *elem;
    int length;
};

int InitList(SqList &L)//初始化一个空表
{
    L.elem = new ElemType[maxn];//建立一个空表
    if(!L.elem)exit(-2);//内存不足退出
    L.length = 0;//空表的长度
    return 1;
}

int GetElem(SqList L,int i,ElemType &e)//取值
{
    if(i < 1 || i > L.length)return 0;
    e = L.elem[i-1];
    return 1;
}

int LocateElem(SqList L,ElemType e)//查找某个值逻辑位置
{
    for(int i = 0; i < L.length; i ++)
    {
        if(L.elem[i] == e)return i + 1;
    }
    return 0;
}

int ListInsert(SqList &L,int i,ElemType e)//插入一个元素
{
    if((i < 1) || (i > L.length))
    {
        return 0;
    }
    if(L.length == maxn)
    {
        return 0;
    }
    for(int j = L.length - 1; j >= i - 1; j --)
    {
        L.elem[j+1] = L.elem[j];
    }
    L.elem[i-1] = e;
    L.length++;
    return 1;
}

int ListDelete(SqList &L,int i)//删除逻辑位置的数值
{
    if((i < 1) || (i > L.length))
    {
        return 0;
    }
    for(int j = i; j < L.length; j ++)
    {
        L.elem[j-1] = L.elem[j];
    }
    L.length--;
    return 1;
}

int Listcreate(SqList &L,int len)//创建一个顺序表
{
    for(int i = 0; i < len; i ++)
    {
        L.elem[i] = i + 1;
    }
    L.length = len;
    return 1;
}

int Listprint(SqList &L)//输出顺序表
{
    for(int i = 0; i < L.length; i ++)
    {
        cout << "实际位置" << i << ' ' << "逻辑位置"
             << i + 1 << ' ' << "数值" << L.elem[i] << endl;
    }
    return 1;
}

int main()
{
    int flag = 1;
    int len = 0;
    int i = 0;
    ElemType e;
    SqList L;
    while(flag)
    {
        cout << endl;
        cout << "菜单如下" << endl;
        cout << "0创建顺序表" << endl;
        cout << "1顺序表取值" << endl;
        cout << "2顺序表查找" << endl;
        cout << "3顺序表插入" << endl;
        cout << "4顺序表删除" << endl;
        cout << "5输出顺序表" << endl;
        cout << "6退出顺序表系统" << endl;
        int op;
        cin >> op;
        switch(op)
        {
            case 0:
                cout << "请输入你想创建的长度" << endl;
                cin >> len;
                Listcreate(L,len);
                break;
            case 1:
                cout << "请输入你想查找的逻辑位置" << endl;

                cin >> i;
                GetElem(L,i,e);
                cout << "实际位置 " << i - 1 << ' ' << "逻辑位置 "
                     << i << ' ' << "数值 " << e << endl;
             break;
            case 2:
                cout << "请输入查找的那个值的逻辑位置" << endl;
                cin >> e;
                cout << LocateElem(L,e) << endl;
                break;
            case 3:
                cout << "请输入想插入的元素及逻辑位置" << endl;
                cin >> e;
                cin >> i;
                ListInsert(L,i,e);
                break;
            case 4:
                cout << "请输入想删除的元素的逻辑位置" << endl;
                cin >> i;
                ListDelete(L,i);
                break;
            case 5:
                Listprint(L);
                break;
            case 6:
                flag = 0;
                break;
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zzzanj/article/details/82833614