顺序表的相关操作

#include<iostream>
using namespace std;

#define Maxsize 10
typedef int ElemType;
typedef struct                    //顺序表的静态存储结构
{
    ElemType data[Maxsize];
    int length  ;
}SqList;

void PrintTitle()
{
    cout<<"**********顺序表的功能选择********************\n"<<endl;
    cout<<"1.创建(显示)\t2.插入\t3.删除\t4.退出\t5.逆序\n"<<endl;
    cout<<"**********************************************"<<endl;
    cout<<"输入你的选择: "<<endl;
}

void Print(SqList *L)
{
    if(L->length == 0)
        cout<<"顺序表为空!"<<endl;
    else
    {
        for(int j = 0;j < L->length;++j)
        cout<<L->data[j]<<"  ";
        cout<<endl;
    }
}


int CreateList(SqList *L)        //创建顺序表
{
    int n ,i=0;
    L->length = 0;                //初始化顺序表的其实地址和元素个数
    cout<<"Please input SqList number:(Ctrl+Z to end)"<<endl;  //输入元素
    while(cin>>n)
    {
        if(L->length >= Maxsize)
        {
            cout<<"元素个数已达最大值!";
            break;
        }
        else{
        L->data[i] = n;
        ++i;
        ++L->length ;
        }
    }
    cout<<"已创建的顺序表为:"<<endl;//输出创建的顺序表
    Print(L);
    PrintTitle();
    return 0;
}

int ListInsert(SqList *L,int i,ElemType e)  //插入函数
{
    int k;
    if(L->length >= Maxsize||i < 1||i > L->length+1)//插入位置越界
    {
        cout<<"插入位置越界!\n请重新输入你的选择:"<<endl;
        return 0;
    }
    for(k = L->length;k >= i-1;--k)      //插入位置后的数依次后移
        L->data[k+1] = L->data[k];
    L->data[i-1] = e;
    L->length++;
    cout<<"插入后的顺序表为:"<<endl;//输出插入后的顺序表
    Print(L);
    PrintTitle();
    return 0;
}

int Delelement(SqList *L,int i)   //删除元素
{
    int k;
    if(L->length == 0||i < 1||i > L->length)  //删除位置越界
    {
        cout<<"删除位置越界!\n请重新输入你的选择:"<<endl;
        return 0;
    }
    for(k = i;k <L->length ;++k)    //删除位置后的数前移
        L->data[k-1] = L->data[k];
    L->length--;
    cout<<"删除后的顺序表为:"<<endl;//输出删除后的顺序表
    Print(L);
    PrintTitle();
    return 0;
}

int Inverted(SqList *L)
{
    int i,j;
    if(L->length == 0)
        cout<<"顺序表为空!"<<endl;
    else {
        for(i = 0,j = L->length -1;i < j;++i,--j){
        ElemType temp;
        temp = L->data[i];
        L->data[i] = L->data[j];
        L->data[j] = temp;
        }
        cout<<"逆序后的顺序表为:"<<endl;
        Print(L);
    }
    PrintTitle();
    return 0;
}

int main()
{
    PrintTitle();
    SqList L;
    L.length = 0;
    int choice;
    while(cin>>choice)
    {
        if(choice == 4)
            return 0;
        switch(choice)
        {
        case 1:
            CreateList(&L);cin.clear();break;
        case 2:
            {
                int i;
                int e;
                cout<<"输入插入的位置以及插入的元素"<<endl;
                cin>>i>>e;
                ListInsert(&L,i,e);
                break;
            }
        case 3:
            {
                int j;
                cout<<"输入删除的位置"<<endl;
                cin>>j;
                Delelement(&L,j);
                break;
            }
        case 5:
            Inverted(&L);break;
        default:
            cout<<"make sure your choie between 1 to 4!"<<endl;
            break;
        }
    }
    getchar();
    return 0;
}

posted on 2013-10-21 22:46  南归  阅读(179)  评论(0)    收藏  举报