“猿”起

前插法实现链表
#include <iostream>//顺序表
#include <string>
#include <iomanip>
using namespace std;

#define OK 1
#define ERROR 0
#define OVERLOW -2
#define MAXSIZE 10

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

void prin(SqList L){//输出
    for(int i=0;i<=L.length-1;i++){
        cout<<L.elem[i]<<"\t";
    }
    cout<<endl;
}

void InitList(SqList &L){//初始化
    L.elem=new int(MAXSIZE);
    if(!L.elem){
        cout<<"创建空表失败"<<endl;
    }else{
        L.length=0;
        cout<<"创建空表成功"<<endl;
    }
}

void innt(SqList &L){//输入值
    int i,a[MAXSIZE],in=1;
    cout<<"请输入您想要输入进空表的内容,并以0结尾"<<endl;
    for(i=0;i<MAXSIZE&∈i++){
        cin>>in;
        a[i]=in;
    }
    for(i=0;i<MAXSIZE&&a[i];i++)
    {
        L.elem[i]=a[i];
        ++L.length;
    }
    cout<<"输入值成功,输入后表中数据为:"<<endl;
    prin(L);
}

void GETELEM(SqList L){//取值
    int i;
    cout<<"请输入您想知道第几个元素的数值"<<endl;
    cin>>i;
    if(i<1||i>L.length){
        cout<<"您输入的数值错误,请重新选择"<<endl;
    }else{
        cout<<"您需要的数据为"<<L.elem[i-1]<<endl;
    }
}

void LocateElem1(SqList L){//值查找
    int i=0,e;
    cout<<"请输入您要查找的"<<endl;
    cin>>e;
    for(;i<L.length&&L.elem[i]!=e;i++);
    if(L.elem[i]==e){
        cout<<"您输入的值以查到,该值在表中第"<<i<<"位"<<endl;
    }else{
        cout<<"您查找的元素不存在"<<endl;
    }
}

void LocateElem2(SqList L){//地址查找
    int e;
    cout<<"请输入您所要查找的是第几位元素"<<endl;
    cin>>e;
    if(e>L.length)
        cout<<"您查找的值不存在"<<endl;
    else
        cout<<"您所查找的第"<<e<<"位元素的值为:"<<L.elem[e-1]<<endl;
}

void ListInsert(SqList &L){//插入,i为插入位置
    int j,i,e;
    cout<<"请输入您所想要在第几位插入数值"<<endl;
    cin>>i;
    cout<<"请输入您想要插入数值"<<endl;
    cin>>e;
    if((i<1)||(i>L.length+1)){
        cout<<"您输入的值错误,请重新选择"<<endl;
    }else{
        for(j=L.length-1;j>=i-1;j--){
            L.elem[j+1]=L.elem[j];
        }
        L.elem[i-1]=e;
        ++L.length;
        cout<<"您插入数值成功,插入后的表为:"<<endl;
        prin(L);
    }
}

void ListDelete(SqList &L){//删除
    int f;
    cout<<"请输入您想要删除第几位元素"<<endl;
    cin>>f;
    int j;
    if((f<1)||(f>L.length)){
        cout<<"输入错误"<<endl;
    }else{
    for(j=f;j<=L.length-1;j++)
        L.elem[j-1]=L.elem[j];
    --L.length;
    cout<<"已删除第"<<f<<"位元素,删除后的顺序表为:"<<endl;
    prin(L);
    }
}

int main(int argc, const char * argv[]) {
    int temp,choose;
    SqList L;
    cout << "请输入你想选择的项目"<<endl<<"1.创建空表"<<endl<<"2.输入"<<endl<<"3.取值"<<endl<<"4.查找"<<endl<<"5.插入"<<endl<<"6.删除"<<endl<<"0.退出"<<endl;
    choose=1;
    while(choose){
        cin>>choose;
        switch (choose) {
            case 1://创建空表
            InitList(L);
            break;
            case 2://顺序表信息输入
            innt(L);
            break;
            case 3://取值
            GETELEM(L);
            break;
            case 4://查找
            cout<<"请选择需要按值查找还是按地址查找"<<endl<<"1.按值查找"<<endl<<"2.按地址查找"<<endl;
            cin>>temp;
            switch (temp) {
                case 1://按值查找
                LocateElem1(L);
                break;
                case 2://按地址查找
                LocateElem2(L);
                break;
                default:
                break;
            }
            break;
            case 5://插入
            ListInsert(L);
            break;
            case 6://删除
            ListDelete(L);
            break;
            default:
            cout<<"您输入的数值错误,请重新输入。"<<endl;
            break;
        }
    }
    return 0;
}

猜你喜欢

转载自blog.51cto.com/14234314/2369230