• 顺序表基本实现-插入删除查找


    书本上的代码实现

    #include <stdio.h> //输出 
    #include <cstdlib> //为了exit
    #define MAXSIZE 10
    
    //书本的定义
    #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){
        L.elem=new ElemType[MAXSIZE];
        if(!L.elem)  //存储分配失败
            exit(OVERFLOW);
        L.length=0;
    }
    
    //按位查找 
    Status GetElem(SqList L,int i,ElemType &e){
        if(i<1||i>L.length)
            return ERROR;
        e=L.elem[i-1];
        return OK;
    }
    
    //按值查找
    Status LocateElem(SqList L,ElemType e){
        for(int i=0;i<L.length;i++)
            if(L.elem[i]==e)
                return i+1;//返回地址
        return 0; 
    } 
    
    //插入
    Status ListInsert(SqList &L,int i,ElemType e){
        if(i<1||i>L.length+1)
            return ERROR;
        if(L.length==MAXSIZE)
            return ERROR;
        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 OK;
    } 
    
    //删除 
    Status ListDelete(SqList &L,int i){
        if((i<1)||(i>L.length))
        for(int j=i;j<=L.length-1;j++){
            L.elem[j-1]=L.elem[j];
        }
        --L.length;
         return OK;
    } 
    
    int main(){
        SqList L;
        InitList(L);
        //插入
        ListInsert(L,1,3);
        ListInsert(L,2,2);
        ListInsert(L,3,1);
        //查看表
        for(int i=0;i<L.length;i++){
            printf("elem=%d
    ",L.elem[i]);
        } 
        // 按值查找
        int elem;
        GetElem(L,1,elem);//输出2 
            printf("elem1=%d
    ",elem);
        GetElem(L,3,elem);//输出0
            printf("elem2=%d
    ",elem);
        //按位查找
        int local1=1;
        int local2=4;
        int elem1= LocateElem(L,local1);//输出3
        int elem2= LocateElem(L,local2);//输出0 
        printf("elem1=%d,elem2=%d
    ",elem1,elem2);
        //删除
        ListDelete(L,local1);//删除地址0
        //查看表
        for(int i=0;i<L.length;i++){
            printf("elem=%d
    ",L.elem[i]);
        } 
    }
    View Code

    王道考研的代码实现-插入删除

    #include <stdio.h>
    #define MaxSize 5 //最大长度 
    
    //初始定义值 
    #define OK 1  
    #define ERROR 0
    #define OVERFLOW -2
    typedef int Status;
    
    //静态存储 
    typedef struct{
        int data[MaxSize];//数组的静态存储 
        int length;//当前长度 
    }SqList;//顺序表的类型定义 
    //初始化
    void InitList(SqList &L){
        L.length=0;
    } 
    //插入
    bool ListInsert(SqList &L,int i,int e){
        if(i<1||i>L.length+1)//判断i的范围是否有效 
            return false;
        if(L.length>=MaxSize)//判断顺序表有没有满 
            return false; 
        for(int j=L.length;j>=i;j--)
            L.data[j]=L.data[j-1];    //将第i个元素及之后的元素后一 
        L.data[i-1]=e;                //在位置i处放入e 
        L.length++;                    //长度加1 
        return true; 
    } 
    //删除 
    bool ListDelete(SqList &L,int i,int &e){
        if(i<1||i>L.length) //判断i的范围是否有效 
            return false;
        e=L.data[i-1];//将被删除的元素赋值给e
        for(int j=i;j<L.length;j++)//将第i个位置后的元素前移 
            L.data[j-1]=L.data[j];
        //应该再删除最后一个
        L.data[L.length-1]=0;
        L.length--;        //线性表长度减1 
        return true;  
    } 
    //违规打印 
    int main(){
        SqList L;//声明
        InitList(L);//初始化顺序表
        ListInsert(L,1,3);//位置从1开始 
        ListInsert(L,2,2);
        ListInsert(L,3,1);
        ListInsert(L,1,5);//插入1的位置 
        //删除前,可以将MaxSize改成L.length 
        for(int i=0;i<MaxSize;i++){
            printf("data[%d]=%d
    ",i,L.data[i]);
        } 
        int e=-1;//用变量e把删除的元素“带回来”
        if(ListDelete(L,2,e))
            printf("删除了元素了%d
    ",e);
        else
             printf("删除了元素了");
        for(int i=0;i<MaxSize;i++){
            printf("data[%d]=%d
    ",i,L.data[i]);
        } 
    }
    View Code

    王道考研的代码实现-查找

    #define InitSize 10 //顺序表的初始长度 
    #include <stdlib.h>//malloc函数的头文件 
    #include <stdio.h> 
    typedef int ElemType;
    typedef struct{
        ElemType *data; //指示动态分配数组的指针
        int MaxSize;
        int Length; 
    }SeqList;
    
    //按位查找 
    ElemType GetElem(SeqList L,int i){
        return L.data[i-1];//和普通访问数组一样 
    }
    
    //按值查找
    int LocateELem(SeqList L,int e){
        for(int i=0;i<L.Length;i++)
            if(L.data[i]==e)
                return i+1;
        return 0;
    } 
    //初始化
    void InitList(SeqList &L){
        L.data=(int *)malloc((InitSize)*sizeof(int));
        L.Length=0; 
        L.MaxSize=InitSize;
    } 
    bool ListInsert(SeqList &L,int i,int e){
        if(i<1||i>L.Length+1)
            return false;
        if(L.Length>=L.MaxSize)
            return false;
        for(int j=L.Length;j>=i;j--)
            L.data[j]=L.data[j-1];    //将第i个元素及之后的元素后一 
        L.data[i-1]=e;                //在位置i处放入e 
        L.Length++;                    //长度加1 
        return true; 
        
    }
    int main(){
        SeqList L;
        InitList(L);
        ListInsert(L,1,3);//位置从1开始 
        ListInsert(L,2,2);
        ListInsert(L,3,1);
        int e=3;
        e=LocateELem(L,e);
    
            printf("%d",e);
        
    }
    View Code

    注:书本是指严奶奶的数据结构,使用的是dev

  • 相关阅读:
    virtualbox+vagrant学习-2(command cli)-9-vagrant Plugin命令
    virtualbox+vagrant学习-2(command cli)-15-vagrant resume命令
    virtualbox+vagrant学习-2(command cli)-14-vagrant reload命令
    virtualbox+vagrant学习-2(command cli)-12-vagrant Provision命令
    virtualbox+vagrant学习-2(command cli)-11-vagrant PowerShell命令
    java设计模式之单例
    java设计模式之策略
    java设计模式之组合
    设计模式之适配器
    java设计模式之模板方法
  • 原文地址:https://www.cnblogs.com/chenliugou/p/14186873.html
Copyright © 2020-2023  润新知