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

2019-04-29  本文已影响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)。

上一篇 下一篇

猜你喜欢

热点阅读