美文网首页
数据结构的标准形式(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.顺序表

    一:C语言版本 顺序表基本操作 顺序表的定义/*****InitSize 线性表长度MaxSize 线性表允许的...

  • 数据结构的标准形式(C、Python版本):2.链表

    数据结构的标准形式(C、Python版本):2.链表 单链表 1. 定义 2.初始化 3.判空 4.求表长 5.按...

  • 数据结构基础2

    二,顺序表 1,顺序表的形式。(先忘掉python的列表这些数据结构) 内存:以一个字节为索引单位;类型本质:in...

  • python中的树数据结构

    线性数据中的典型顺序表和链表已经讲完: 《顺序表数据结构在python中的应用》 《python实现单向链表数据结...

  • josephus问题

    线性表是数据结构的中很常见的结构,其中一种就是顺序表,python已经内置了顺序表。list就是循序表的的实现。下...

  • 数据结构之线性表(上)

    上篇先来看顺序表,顺序表就是使用物理位置来表示逻辑位置的线性表 由于面向过程的C语言在描述数据结构时存在天然的弱势...

  • 【数据结构】【C#】005-栈:💫顺序栈

    C#数据结构:顺序栈 1、自定义顺序栈结构: 顺序栈:测试用例 输出结果: img.jpg 注意: 1、栈也是表结...

  • 进阶篇1-进阶篇承上启下

    参考书程序员的数学大话数据结构 大话设计模式c语言python标准库python基础教程docs.python....

  • 线性表

    学习内容来自数据结构详解——线性表(C++实现) 线性表(List):零个或多个数据元素的有限序列。顺序表(数组)...

  • 线性表的顺序存储

    一、概念 线性表的顺序存储指的是用一组地址连续的存储单元依次存储线性表的数据结构。——《数据结构》C语言版 简而言...

网友评论

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

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