C语言顺序表的基本操作(初始化,插入,删除,查询,扩容,打印,清空等)

下面是C语言顺序表的基本操作的完整攻略:

1. 初始化操作

  • 初始化操作是顺序表的第一步,用于创建一个空的顺序表。
#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 10  // 定义顺序表的最大长度

typedef struct {
    int data[MAXSIZE];  // 存储数据元素
    int length;         // 记录顺序表的当前长度
} SqList;               // 顺序表的类型定义

// 初始化顺序表
void InitList(SqList *L) {
    for (int i = 0; i < MAXSIZE; i++) {
        L->data[i] = 0; // 所有数据元素初始化为0
    }
    L->length = 0;      // 当前长度为0
}
  • 示例说明:
int main() {
    SqList L;           // 声明一个顺序表
    InitList(&L);       // 初始化顺序表
    printf("%d\n", L.length);   // 打印顺序表的长度,结果应该为0
    return 0;
}

2. 插入操作

  • 插入操作是指在顺序表中指定位置插入一个数据元素。
// 在指定位置插入元素
int ListInsert(SqList *L, int pos, int elem) {
    if (pos < 1 || pos > L->length + 1 || L->length == MAXSIZE) {
        // 如果插入位置超出范围或者顺序表已满,则返回0表示插入失败
        return 0;
    }

    // 如果插入位置在顺序表中间,则需要将pos及其后面的元素向后移动一个位置
    for (int i = L->length; i >= pos; i--) {
        L->data[i] = L->data[i-1];
    }
    L->data[pos-1] = elem;  // 在pos位置插入elem
    L->length++;            // 顺序表长度加1
    return 1;               // 插入成功
}
  • 示例说明:
int main() {
    SqList L;                   // 声明一个顺序表
    InitList(&L);               // 初始化顺序表
    ListInsert(&L, 1, 1);       // 在第1个位置插入1
    ListInsert(&L, 2, 2);       // 在第2个位置插入2
    ListInsert(&L, 1, 3);       // 在第1个位置插入3
    for (int i = 0; i < L.length; i++) {
        printf("%d ", L.data[i]);   // 打印L中的所有元素,结果应该为3 1 2
    }
    return 0;
}

3. 删除操作

  • 删除操作是指删除顺序表中指定位置的数据元素。
// 删除指定位置的元素
int ListDelete(SqList *L, int pos) {
    if (pos < 1 || pos > L->length) {
        // 如果删除位置超出范围,则返回0表示删除失败
        return 0;
    }

    // 如果删除位置在顺序表中间,则需要将pos后面的元素向前移动一个位置
    for (int i = pos; i < L->length; i++) {
        L->data[i-1] = L->data[i];
    }
    L->length--;    // 顺序表的长度减1
    return 1;       // 删除成功
}
  • 示例说明:
int main() {
    SqList L;                       // 声明一个顺序表
    InitList(&L);                   // 初始化顺序表
    for (int i = 1; i < 6; i++) {
        ListInsert(&L, i, i);       // 在顺序表的前5个位置依次插入1~5
    }
    ListDelete(&L, 3);              // 删除第3个位置的元素
    for (int i = 0; i < L.length; i++) {
        printf("%d ", L.data[i]);   // 打印L中的所有元素,结果应该为1 2 4 5
    }
    return 0;
}

4. 查询操作

  • 查询操作是指在顺序表中查找指定值的数据元素。
// 查找指定值的元素,并返回它在顺序表中的位置
int LocateElem(SqList *L, int elem) {
    for (int i = 0; i < L->length; i++) {
        if (L->data[i] == elem) {
            return i+1;     // 返回该元素在顺序表中的位置
        }
    }
    return -1;              // 如果没找到,则返回-1表示失败
}
  • 示例说明:
int main() {
    SqList L;                       // 声明一个顺序表
    InitList(&L);                   // 初始化顺序表
    for (int i = 1; i < 6; i++) {
        ListInsert(&L, i, i);       // 在顺序表的前5个位置依次插入1~5
    }
    int pos = LocateElem(&L, 3);    // 在顺序表中查找值为3的元素
    printf("%d\n", pos);            // 打印3的位置,结果应该为3
    return 0;
}

5. 扩容操作

  • 扩容操作是指当顺序表已经满了,需要动态扩大顺序表的存储空间。
// 扩容操作,将顺序表的存储空间扩大一倍
void ExpandList(SqList *L) {
    int *temp = (int *)realloc(L->data, MAXSIZE*2);  // 重新分配存储空间
    L->data = temp;
    MAXSIZE *= 2;
}
  • 示例说明:
int main() {
    SqList L;                       // 声明一个顺序表
    InitList(&L);                   // 初始化顺序表
    for (int i = 1; i < 11; i++) {
        ListInsert(&L, i, i);       // 在顺序表的前10个位置依次插入1~10
    }
    ExpandList(&L);                 // 扩大顺序表的空间为原来的2倍
    ListInsert(&L, 11, 11);         // 在第11个位置插入11
    printf("%d\n", L.data[10]);     // 打印第11个元素,结果应该为11
    return 0;
}

6. 打印操作

  • 打印操作是指将顺序表中的所有数据元素依次打印出来。
// 打印顺序表
void PrintList(SqList *L) {
    for (int i = 0; i < L->length; i++) {
        printf("%d ", L->data[i]);  // 输出每个元素
    }
    printf("\n");                   // 输出换行符
}
  • 示例说明:
int main() {
    SqList L;                       // 声明一个顺序表
    InitList(&L);                   // 初始化顺序表
    for (int i = 1; i < 6; i++) {
        ListInsert(&L, i, i);       // 在顺序表的前5个位置依次插入1~5
    }
    PrintList(&L);                  // 打印顺序表中的所有元素
    return 0;
}

7. 清空操作

  • 清空操作是指将顺序表中的所有数据元素清空。
// 清空顺序表
void ClearList(SqList *L) {
    for (int i = 0; i < MAXSIZE; i++) {
        L->data[i] = 0;     // 所有数据元素初始化为0
    }
    L->length = 0;          // 顺序表长度归零
}
  • 示例说明:
int main() {
    SqList L;                       // 声明一个顺序表
    InitList(&L);                   // 初始化顺序表
    for (int i = 1; i < 6; i++) {
        ListInsert(&L, i, i);       // 在顺序表的前5个位置依次插入1~5
    }
    ClearList(&L);                  // 清空顺序表
    printf("%d\n", L.length);       // 打印顺序表长度,结果应该为0
    return 0;
}

以上就是C语言顺序表的基本操作的完整攻略,包括了初始化、插入、删除、查询、扩容、打印、清空等操作,可以帮助读者更好地理解和掌握顺序表的使用方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言顺序表的基本操作(初始化,插入,删除,查询,扩容,打印,清空等) - Python技术站

(0)
上一篇 2023年6月20日
下一篇 2023年6月20日

相关文章

  • mac环境下python3安装及配置

    Mac环境下Python3安装及配置 Python是一种高级编程语言,广泛应用于Web开发、机器学习、数据分析等领域。在Mac环境下使用Python可以提高工作效率,但需要正确安装及配置Python,下面我们来介绍具体步骤。 步骤一:安装Homebrew Homebrew是Mac下最流行的包管理工具,用于简化软件安装过程。在Terminal中输入以下命令安装…

    其他 2023年3月28日
    00
  • 中国科学院大学开源镜像站

    中国科学院大学开源镜像站 介绍 中国科学院大学开源镜像站(https://mirrors.ucas.ac.cn/)是一个致力于开放、自由、独立、可持续的镜像站点,为开源软件和系统提供了一个高速的下载服务。该镜像站为全球范围内的开源项目提供了下载服务,并且提供国内网络环境下更加稳定,快速的镜像下载服务。目前,该镜像站点支持的开源项目有 Python、Node.…

    其他 2023年3月29日
    00
  • 关于protected修饰符详解-源于Cloneable接口

    下面就来详细讲解一下“关于protected修饰符详解-源于Cloneable接口”的完整攻略。 1. protected修饰符的作用 protected 修饰符用于类的成员变量,方法及构造方法,可以让子类访问并修改原本属于父类的该成员变量、方法及构造方法。在同一个包中的其他类中,也可以访问 protected 成员。 2. protected修饰符的使用限…

    other 2023年6月27日
    00
  • maven如何打包动态环境变量(包括启动脚本)

    Maven是一款Java项目自动化构建工具,可以通过配置maven打包命令实现生成可执行的Java应用程序,同时还可以将配置文件等资源一同打包到一起方便部署。打包使用的配置文件中常常会包含一些动态环境变量,例如生产环境不同的数据库连接参数或者日志文件路径等。下面将详细讲解如何在Maven中打包动态环境变量。 1.配置Maven profile 在项目的pom…

    other 2023年6月27日
    00
  • elasticdump离线安装

    Elasticdump离线安装攻略 Elasticdump是一个用于将Elasticsearch数据导入和导出的工具。在某些情况下,我们可能需要在没有网络连接的情况下安装Elasticdump。本攻略将介绍如何在离线环境中安装Elasticdump。 步骤一:下载Elasticdump 首先,我们需要在有网络连接的环境中下载Elasticdump的安装包。我…

    other 2023年5月9日
    00
  • Delphi控件ListView的属性及使用方法详解

    Delphi控件ListView的属性及使用方法详解 ListView是Delphi中常用的控件之一,通常用于以列表形式展示数据。下面详细讲解ListView的属性及使用方法。 属性 Items ListView的主要属性是Items,其类型为TListItems,表示ListView中的行数据。通过其Add方法可以添加行,例如: ListView1.Ite…

    other 2023年6月26日
    00
  • javascript之es6

    JavaScript之ES6的完整攻略 ES6是JavaScript的一个重要版本,引入了许多新的语言特性和功能,使得JavaScript更加强大和易于使用。本文将介绍ES6的主要特性和功能,并提供两个示例说明,以帮您更好地了解应用这些技术。 ES6的主要特性和功能 let和const关键字 ES6引入了和const关键字,用于声明变量和常量。与var关键字…

    other 2023年5月7日
    00
  • gitlab合并pr

    gitlab合并PR 在协作开发的过程中,同一项目经常会有多人参与,为了方便协同工作,除了将代码仓库托管在GitLab等版本管理工具上,还需要利用GitLab提供的PR(Pull Requests)功能来检验代码质量,保证项目的稳定性和安全性。在代码修正完毕后,需要将PR中的代码合并到主分支中,下面介绍如何在GitLab中合并PR。 1. 提交PR 在Git…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部