数据结构——顺序表的插入、删除、查找算法

//库函数的引用
#include <stdio.h>
#include <stdlib.h>
//符号常量的定义
#define MAXSIZE 100  //预估顺序表容量
#define OK 1
#define ERROR 0
#define OVERFLOW -2

//数据类型的重命名、定义
typedef int Status;
typedef int ElemType;
typedef struct{
    ElemType *elem;
    int length;
}SqList;

//自定义函数的声明
Status InitList(SqList &L);
Status ListInsert(SqList &L,int i ,ElemType e);
Status ListDelete(SqList &L,int i);
Status GetElem(SqList L, int i, ElemType &e);

//主函数
int main(int argc, char *argv[]) {
    SqList L;
    int choice,z = 1;
    int i;
    ElemType e;
    if(!InitList( L ))
    {
        exit(0);
    }
    //输出菜单
    while(z)
    {
    printf("-------线性表数据存储结构---\n");
    printf("|\t\t1.插入\t\t|\n");
    printf("|\t\t2.删除\t\t|\n");
    printf("|\t\t3.查找\t\t|\n");
    printf("|\t\t0.退出\t\t|\n");
    printf("请输入你要选择的程序\n");
    scanf("%d",&choice);
    switch(choice){
        case 1://插入
        //给已知L(已知)、i、e
        printf("请输入插入位置:");
        scanf("%d",&i);
        printf("请输入插入元素:");
        scanf("%d",&e);
        //调用
        if(OK == ListInsert(L , i , e))
        {
            printf("插入成功!\n\n");
        }
        else
        {
            printf("插入失败!\n\n");
        }
        break;
        case 2://删除
        printf("输入您想删除的位置\n");
                scanf("%d",&i);
                if(OK == ListDelete(L,i))
                {
                    printf("删除成功\n\n");
                }
                else
                {
                    printf("删除失败\n\n");
                }
                
                break;
        case 3://查找
         printf("输入您想查找的元素序号\n");
            scanf("%d",&i);
            //调用
                if(OK == GetElem(L , i , e))
                {
                    printf("您查找的元素是: \n");
                }
                else
                {
                    printf("您输入的序号有误\n");
                }
        
        break;

        case 0:z = 0;
        printf("欢迎下次再来!");
        break;
        default:printf("输入错误!\n");
    }
}
    return 0;
}
//——————自定义函数(来自《数据结构》)
//初始化
Status InitList(SqList &L){                                  //构造一个空的顺序表
    L.elem = new ElemType[MAXSIZE];                                     //为顺序表分配 空间
    if(!L.elem)  exit(OVERFLOW);                                    //存储分配失败
    L.length = 0;                                                     //空表长  度为0
    return OK;
}
//插入算法
Status ListInsert(SqList &L,int i ,ElemType e){
    int j;
    if(i<1 || i>L.length+1) return ERROR;                         //i值不合法
    if(L.length==MAXSIZE) return ERROR;                         //当前存储空间已满
    for(j=L.length-1;j >= i-1;j--) L.elem[j+1]=L.elem[j];         //插入位置及之后的元素后移
    L.elem[i-1]=e;                                                //将新元素e放入第i个位置
    L.length ++;                                                 //表长增1
    return OK;
}
//删除算法
Status ListDelete(SqList &L,int i)
{
    int j;
    if((i<1)||(i>L.length))
        return ERROR;   //i值不合法
    for (j=i ; j<=L.length-1 ; j++)            
            L.elem[j-1]=L.elem[j];//被删除元素之后的元素前移
        --L.length; //表长减1
    return OK;
}
//查找算法
Status GetElem(SqList L, int i, ElemType &e){
    if (i < 1 || i > L.length)
    return ERROR;  
    e = L.elem[i-1];
    return OK;
}

猜你喜欢

转载自blog.csdn.net/m0_61105833/article/details/120816589
今日推荐