zoukankan      html  css  js  c++  java
  • 考研数据结构-顺序表(基本操作)

    1、本代码实现与王道和严蔚敏老师的教材基本保持一致。此代码主要用于考研用,为简化代码,顺序表并没有像严蔚敏老师的教材上那样使用动态分配。

    2、注意本代码中元素的位置i=(元素的下标+1)。即线性表中元素的位置是从1开始的,而数组中元素的下标是从0开始的。

    所以插入位置的范围是(1=<i<=L.length+1),删除位置的范围是(1<=i<=L.length)。 (插入位置一般是在指定位置之前。)

    (根据王道单科)

    假设元素个数为n个:

    在任意位置插入元素的概率为1/(n+1)                    |         在任意位置删除元素的概率为1/n

    在i位置插入元素需移动(n-i+1)个元素                    |        在i位置删除元素需移动(n-i)个元素    

    在任意位置插入元素的概率为1/(n+1)                    |         在任意位置删除元素的概率为1/n

    有些看了天勤数据结构的同学可能会疑问,为什么天勤里面写的却是

    在任意位置插入元素的概率为1/(n+1)                    |         在任意位置删除元素的概率为1/n

    在i位置插入元素需移动(n-i)个元素                    |        在i位置删除元素需移动(n-i-1)个元素    

    在任意位置插入元素的概率为1/(n+1)                    |         在任意位置删除元素的概率为1/n

    这是因为天勤的书他的元素位置i也是从0开始的,因此它的元素的位置i=元素的下标。他的书其实很多地方都简化了代码。比如说没有再写ElemType,而是直接写int类型等等。

    好了,让我们看看代码吧。

    本代码实现函数有:

    void InitList(Sqlist &L)
    bool ListInsert(Sqlist &L,int i,ElemType e)
    bool ListDelete(Sqlist &L,int i,ElemType &e)
    bool getElem(Sqlist L,int i,ElemType &e)
    int LocateElem(Sqlist L,ElemType e)

    void ListLoad(Sqlist L)
    #include<stdio.h>
    #define true 1
    #define false 0
    #define MaxSize 100        
    #define ElemType int
    #define Status int 
    
    
    typedef struct{
        ElemType data[MaxSize];        
        int length;            
    }Sqlist;
    
    //构造一个空的线性表L 
    void InitList(Sqlist &L){
        L.length=0;
    }
    
    
    bool ListInsert(Sqlist &L,int i,ElemType e){ 
    //将元素e插到顺序表L中第i个位置 
        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 true;
    }
    
    bool ListDelete(Sqlist &L,int i,ElemType &e){
    //删除L中第i个位置的元素 
        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;
    } 
    
    //用e返回L中第i个数据元素的值 
    bool getElem(Sqlist L,int i,ElemType &e){
        if(i<1||i>L.length)return false;
        e=L.data[i-1];
        return true; 
    } 
    
    //返回L中第一个元素值等于e的位置 
    int LocateElem(Sqlist L,ElemType e){
        int i;
        for(i=0;i<L.length;i++)
            if(L.data[i]==e)
                return i+1;        //返回所找元素的位置 
        return 0;         //退出循环,没找到这个元素 
    } 
    
    void ListLoad(Sqlist L){
        if(L.length==0){
            printf("当前顺序表为空
    ");
            return;
        }
        printf("当前顺序表元素为:");
        for(int i=0;i<L.length;i++)
            printf("%d ",L.data[i]);
        printf("
    ");
        return;
    }
    
    int main(){
        Sqlist T;
        ElemType e,x;
        int a,i;
        InitList(T);
        ListLoad(T);
        while(1){
            printf("1:插入元素到指定位置
    ");  //ListInsert
            printf("2:删除指定位置元素
    ");   //ListDelete
            printf("3:找到指定元素的位置
    ");  //LocateElem 
            printf("请选择:");
            scanf("%d",&a); 
            switch(a){
                case 1:scanf("%d %d",&i,&x);
                        if(ListInsert(T,i,x))printf("元素%d成功插入%d位置
    ",x,i);
                        else printf("插入失败
    "); 
                        break;
                case 2:scanf("%d",&i);
                        if(ListDelete(T,i,e))printf("成功删除%d位置元素,该元素为%d
    ",i,e);
                        else printf("删除失败
    ");
                        break;
                case 3:scanf("%d",&e);
                        if(!LocateElem(T,e))printf("未找到该元素
    ");
                        else printf("该元素位于%d
    ",LocateElem(T,e)); 
                        break;
                default:return 1;
            }
            ListLoad(T);
        } 
    } 
    
    
    
     
     

     插入元素ListInsert:

    删除元素(ListDelete):

     

    查找指定元素的位置(LocateElem)

  • 相关阅读:
    mirco新建proto流程
    Ubuntu默认防火墙安装、启用、配置、端口、查看状态相关信息
    Rails核心组件
    Ruby中文乱码问题
    python str转dict
    SQLserver AwaysOn日志文件过大,处理办法
    MySQL的一些小细节
    mysql删除表中重复值
    可恶的自增长标识符
    reset slave all更彻底
  • 原文地址:https://www.cnblogs.com/double891/p/9124828.html
Copyright © 2011-2022 走看看