美文网首页
数据结构的标准形式(C、Python版本):1.顺序表

数据结构的标准形式(C、Python版本):1.顺序表

作者: 我们去捉水母吧 | 来源:发表于2019-04-29 12:39 被阅读0次

    一:C语言版本

    顺序表基本操作

    InitList 初始化
    
    Length 求表长
    
    LocateElem 按值查找
    
    GetElem 按位查找
    
    ListInsert 插入操作
    
    ListDelete 删除操作
    
    PrintList 输出
    
    Empty 判空操作
    
    DestroyList 销毁
    
    1. 顺序表的定义

      
      /*****
      
      InitSize 线性表长度
      
      MaxSize  线性表允许的最大长度
      
      Length  记录线性表当前长度
      
      ******/
      
      #define InitSize 100
      
      typedef struct{
      
          DataType *data;
      
          int MaxSize,Length;
      
      }SeqList;
      
      
    2. 初始化

      
      bool InitList(SeqList *L){
      
          L.data = (DataType *)malloc((sizeof(DataType)*InitSize));
      
          if(NULL == L.data){
      
              return false;
      
          }
      
          L.length = 0;
      
          L.MaxSize = InitSize;
      
          return true;
      
      }
      
      
    3. 插入(在第i个位置插入数据)

    
    bool ListInsert(SeqList *L, int i, DataType e){
    
        if(i<1 || i > L.Length+1){
    
            return false;
    
        }
    
        if( L.Length >= L.MaxSize){
    
            return false;
    
        }
    
        for( int j = L.Lengrh; j >= i; j--){
    
            L.data[j] = L.data[j-1];
    
        }
    
        L.data[i-1] = e;
    
        L.Length++;
    
        return true;
    
      }
    
    
    1. 头插
    
    bool HeadInsert(SeqList *L, DataType e){
    
        if(i < 1 || i > L.length+1 ){
    
            return false;
    
        }
    
        if( L.Length >= L.MaxSize){
    
            return false;
    
        }
    
        for( int j = L.Length; j > 0; j--){
    
            L.data[j] = L.data[j-1];
    
        }
    
        L.data[0] = e;
    
        L.Length++;
    
        return true;
    
    }
    
    
    1. 尾插
    
    bool TailInsert(SeqList *L, DataType e){
    
        if(i < 1 || i > L.length+1 ){
    
            return false;
    
        }
    
        if( L.Length >= L.MaxSize){
    
            return false;
    
        }
    
        L.data[L.Length] = e;
    
        L.Length++;
    
        return true;
    
    }
    
    
    1. 删除第i个元素
    
    bool ListDelet(SeqList *L, int i, DataType &e){
    
        if(i < 1 || i > L.Length){
    
            return false;
    
        }
    
        if(L.Length == 0){
    
            print("Empty!\n")
    
        }
    
        e = L.data[i-1];
    
        for(int j = i; j < L.Length; j++){
    
            L.data[j-1] = L.data[j];
    
        }
    
        L.Length--;
    
        return true;
    
    }
    
    
    1. 头删
    
    bool HeadDelet(SqlList *L, DataType &e){
    
        if(L.Length == 0){
    
            print("Empty!\n")
    
        }
    
        e = L.data[0];
    
        for(int j = 1; j < L.Length; j++){
    
            L.data[j-1] = L.data[j];
    
        }
    
        L.Length--;
    
        return true;
    
    }
    
    
    1. 尾删
    
    bool TailDelet(SqlList *L, DataType &e){
    
        if(L.Length == 0){
    
            print("Empty!\n")
    
        }
    
        e = L.data[L.Length - 1];
    
        L.Length--;
    
        return true;
    
    }
    
    
    1. 按值查找
    ```C
    
    int LocateElem(SeqList L, DataType e){
    
      for(int i = 0; i < L.Length; i++){
    
          if(L.data[i] == e){
    
              return i+1;
    
          }
    
      }
    
      return 0;
    
    }
    
    ```
    
    1. 按位查找

      
      int GetElem(SeqList L, int i){
      
        if(i < 1 || i > L.length){
      
            return false;
      
        }
      
        retuen L.data[i-1];
      
      }
      
      
    2. 求表长

    ```C
    
    int Length(SeqList L){
    
      return L.Length;
    
    }
    
    ```
    
    1. 是否为空
    ```C
    
    bool Empty(SeqList L){
    
      if(L.Length == 0){
    
          return true;
    
      }else{
    
          return false;
    
      }
    
    }
    
    ```
    
    1. 清空
    ```C
    
    void ClearList(SeqList *L){
    
        L.Length = 0;
    
    }
    
    ```
    
    1. 销毁顺序表
    ```C
    
    void DestroyList(SeqList *L){
    
        L.Length = 0;
    
        L.MaxSize = 0;
    
        free(L.data);
    
        L.data = NULL;
    
        return true;
    
    }
    
    ```
    
    1. 打印顺序表
    ```C
    
    void PrintList(SeqList L){
    
        if(L.Length == 0){
    
            print("Empty!\n")
    
            return true;
    
        }
    
        for(int i = 0; i < L.Length; i++){
    
            print("data[%d] is %d\n", i, L.data[i]);
    
        }
    
        return true;
    
    }
    
    ```
    
    1. 逆序

      
      void InvertList(SeqList *L){
      
          ElemType tmp;
      
          int m = L.Length/2;
      
          for(int i = 0; i < m; i++){
      
              tmp = L.data[i];
      
              L.data[i] = L.data[L.Length-1-i];
      
              L.data[L.Length-1-i] = tmp;
      
          }
      
      }
      
      
    1. 冒泡排序
    ```C
    
    BubbleSort(SeqList *L){
    
        ElemType tmp;
    
        if(L.Length == 0){
    
            print("Empty!\n")
    
            return true;
    
        }
    
        for(int i = 0; i < L.Length - 1; i++){
    
            for(int j = 0; j < L.Length-1-i; j++){
    
                if(L.data[j] > L.data[j+1]){
    
                    tmp = L.data[j+1];
    
                    L.data[j+1] = L.data[j];
    
                    L.data[j] = tmp;
    
                }
    
            }
    
        }
    
    }
    
    ```
    
    1. 选择排序
    ```C
    
    void SelectSort(SeqList *L){
    
        Elemtype tmp;
    
        fot(int i = 0; i < L.Length - 1; i++){
    
            max = i;
    
            for(int j = i + 1; j < L.Length; j++){
    
                if(L.data[j] > L.data[j]){
    
                    max = j;
    
                }
    
            }
    
            if(max != i){
    
                tmp = L.data[i];
    
                L.data[i] = L.data[max];
    
                L.data[max] = tmp
    
            }
    
        }
    
    }
    
    ```
    

    2:Python版本

    由于Python的list和Tuple就是采用了顺序表的实现方式,这里不准备给出,意义不大。

    如果你喜欢这篇文章,请给我点赞、分享;如果你不喜欢这篇文章,或者发现我的文章错误的地方,请在站内私信我,或者直接给我发邮件(cqcqhelloworld@gmail.com)。

    相关文章

      网友评论

          本文标题:数据结构的标准形式(C、Python版本):1.顺序表

          本文链接:https://www.haomeiwen.com/subject/yehynqtx.html