线性表_顺序表的基本操作

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 1000000 + 5;
#define MaxSize 50
typedef struct{
    int data[MaxSize];
    int length;
}SqList;
//********************基础操作函数******************//
//初始化顺序表函数,构造一个空的顺序表
void InitList(SqList &L){
    memset(L.data,0,sizeof(L));
    L.length = 0;
    return ;
}
//创建顺序表函数,初始化钱n个数据
bool CreateList(SqList &L,int n){
    if(n < 0 || n > MaxSize)
        return false;
    for(int i = 0;i < n;i++){
        scanf("%d",&L.data[i]);
        L.length++;
    }
    return true;
}
//插入函数
bool ListInsert(SqList &L,int i,int e){
    if(i < 1 && i > L.length + 1)
        return false;
    if(L.length >=MaxSize)
        return false;
    for(int j = L.length;j>=i;j--)
        L.data[j] = L.data[j-1];
    L.data[i-1] = e;
    L.length++;
    return e;
}
//删除函数
bool ListDelete(SqList &L,int i, int &e){
    if(i<1||i>L.length)
        return false;
    e = L.data[i-1];
    for(int j = i;j < L.length;j++)
        L.data[j-1] = L.data[j];
    L.length--;
    return true;
}
//查找函数
int LocateElem(SqList L,int e){
    for(int i = 0;i<L.length;i++)
        if(L.data[i]==e)
        return i+1;
    return 0;
}
//倒置函数
void Reverse(SqList &L){
    if(L.length){
        for(int i = 0;i < L.length-1-i;i++){
            int temp = L.data[i];
            L.data[i] = L.data[L.length-1-i];
            L.data[L.length-1-i] = temp;
        }
    }
}
//奇偶分开排序函数
void SplitSort(SqList &L){
    int Even = 0,Odd = L.length-1;
    int i = 0, j= L.length-1;
    bool flag = false;
    if(L.length){
        for(;i < j;i++,j--){
            while(L.data[i]%2!=0&&i<L.length-1)
                i++;
            while(L.data[j]%2==0&&j>0)
                j--;
            if(L.data[i]%2==0&&L.data[j]%2!=0){
                int temp =L.data[i];
                L.data[i]= L.data[j];
                L.data[j]= temp;
                flag = true;
            }
            if(!flag){
                if(i>j){
                    Even = j;
                    Odd = i;
                }
                else{
                    Even = L.length-1;
                    Odd = 0;
                }
            }
        }
        if(flag){
            for(int i = 0;i <L.length;i++){
                if(L.data[i]%2==0){
                    Odd = i;
                    Even = i - 1;
                    break;
                }
            }
        }
    }
    sort(L.data,L.data+Even+1);
    sort(L.data+Odd,L.data+L.length);
}
//清空顺序表
void ClearList(SqList &L){
    L.length = 0;
}
//*********************功能函数,用以调用基础操作函数**********//
//输出功能函数
void PrintList(SqList L){
    printf("当前顺序表所以元素:");
    for(int i = 0;i < L.length;i++){
        printf("%d ",L.data[i]);
    }
    printf("\n");
}
//创建顺序表函数
void Create(SqList &L){
    int n;
    bool flag;
    L.length = 0;
    printf("请输入要创建的顺序表长度(>1):");
    scanf("%d",&n);
    printf("请输入%d个数(空格隔开):",n);
    flag = CreateList(L,n);
    if(flag){
        printf("创建成功!\n");
        PrintList(L);
    }
    else{
        printf("输入长度非法!\n");
    }

}
//插入功能函数
void Insert(SqList &L){
    int place; int e;int flag;
    printf("请输入要插入的位置(从1开始)及元素:\n");
    scanf("%d %d",&place,&e);
    flag = ListInsert(L,place,e);
    if(flag){
        printf("插入成功!\n");
        PrintList(L);
    }
}
void Delete(SqList &L){
    int place;bool flag;
    printf("请输入要删除的位置(从1开始):\n");
    scanf("%d,&place");
    if(flag){
        printf("删除成功!\n");
        PrintList(L);
    }
}
//查找功能函数
void Search(SqList L){
    int e;bool flag;
    printf("请输入要查找的值:\n");
    scanf("%d",&e);
    flag = LocateElem(L,e);
    if(flag){
        printf("该元素位置为:%d\n",flag);
    }
    else{
        printf("未找到该元素!\n");
    }
}
void menu()
{
    printf("********1.创建                        2.插入*********\n");
    printf("********3.删除                        4.查找*********\n");
    printf("********5.倒置                        6.分奇偶排序***\n");
    printf("********7.输出                        8.清空*********\n");
    printf("********9.退出                              *********\n");
}

int main()
{
    SqList L; int choice;
    InitList(L);
    while (1){
        menu();
        printf("请输入菜单序号:\n");
        scanf("%d", &choice);
        if (9 == choice) break;
        switch (choice){
        case 1:Create(L); break;
        case 2:Insert(L); break;
        case 3:Delete(L); break;
        case 4:Search(L); break;
        case 5:Reverse(L); break;
        case 6:SplitSort(L); break;
        case 7:PrintList(L); break;
        case 8:ClearList(L); break;
        default:printf("输入错误!!!\n");
        }
    }
    return 0;
}

 

posted @ 2022-05-06 22:21  阿涅—Rachel  阅读(47)  评论(0)    收藏  举报