利用C语言实现顺序表的实例操作

利用C语言实现顺序表的实例操作

什么是顺序表

顺序表,是指用一段地址连续的存储单元依次存储线性表中的各元素,从而形成的线性表。在顺序表中,元素的存储位置是按其逻辑顺序存放的。顺序表的优点是数据存储密度高,支持随机存取和直接访问,缺点是插入和删除操作效率较低。

顺序表的基本操作

顺序表的基本操作包括:

  • 初始化顺序表
  • 插入元素
  • 删除元素
  • 查找元素
  • 修改元素
  • 打印顺序表中的所有元素

下面我们将一步步实现这些操作。

顺序表的初始化

顺序表的初始化,就是为顺序表分配内存空间,并将顺序表中存储的元素个数初始化为0。

#include <stdio.h>
#include <stdlib.h>

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

typedef struct {
    int data[MAXSIZE]; // 存储数据元素的数组
    int length; // 顺序表的长度
} SqList;

void initList(SqList *L) {
    L->length = 0; // 初始时长度为0
}

顺序表的插入

在顺序表L的指定位置i处插入元素e,需要将i位置及之后的元素后移,并将e插入到i位置处。插入前需要判断顺序表是否已满,即当前的元素个数是否已经达到了最大长度MAXSIZE。

int insert(SqList *L, int i, int e) {
    if (i < 1 || i > L->length + 1 || L->length == MAXSIZE) { // 判断i的合法性和表满的情况
        return 0; // 插入失败
    }
    for (int j = L->length; j >= i; j--) { // 从后往前移动元素
        L->data[j] = L->data[j-1];
    }
    L->data[i-1] = e; // 插入元素到i位置处
    L->length++; // 顺序表长度增加1
    return 1; // 插入成功
}

顺序表的删除

删除顺序表L中指定位置i处的元素,需要将i位置及之后的元素前移。

int delete(SqList *L, int i) {
    if (i < 1 || i > L->length) { // 判断i的合法性
        return 0; // 删除失败
    }
    for (int j = i-1; j < L->length-1; j++) { // 从前往后移动元素
        L->data[j] = L->data[j+1];
    }
    L->length--; // 顺序表长度减少1
    return 1; // 删除成功
}

顺序表的查找

查找顺序表L中第一个值为e的元素,并返回其在表中的位置。

int locate(SqList *L, int e) {
    for (int i = 0; i < L->length; i++) { // 从前往后查找元素
        if (L->data[i] == e) {
            return i+1; // 返回元素在表中的位置
        }
    }
    return -1; // 元素未找到
}

顺序表的修改

修改顺序表L中指定位置i处的元素为e。

int modify(SqList *L, int i, int e) {
    if (i < 1 || i > L->length) { // 判断i的合法性
        return 0; // 修改失败
    }
    L->data[i-1] = e; // 修改元素值
    return 1; // 修改成功
}

打印顺序表中的所有元素

打印顺序表L中所有元素的值。

void printList(SqList *L) {
    printf("[");

    for (int i = 0; i < L->length; i++) {
        printf("%d", L->data[i]);
        if (i != L->length - 1) {
            printf(", ");
        }
    }

    printf("]\n");
}

示例说明

示例1:插入元素

下面是一个示例代码,展示如何插入元素到顺序表中。

#include <stdio.h>
#include <stdlib.h>

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

typedef struct {
    int data[MAXSIZE]; // 存储数据元素的数组
    int length; // 顺序表的长度
} SqList;

void initList(SqList *L) {
    L->length = 0; // 初始时长度为0
}

int insert(SqList *L, int i, int e) {
    if (i < 1 || i > L->length + 1 || L->length == MAXSIZE) { // 判断i的合法性和表满的情况
        return 0; // 插入失败
    }
    for (int j = L->length; j >= i; j--) { // 从后往前移动元素
        L->data[j] = L->data[j-1];
    }
    L->data[i-1] = e; // 插入元素到i位置处
    L->length++; // 顺序表长度增加1
    return 1; // 插入成功
}

void printList(SqList *L) {
    printf("[");

    for (int i = 0; i < L->length; i++) {
        printf("%d", L->data[i]);
        if (i != L->length - 1) {
            printf(", ");
        }
    }

    printf("]\n");
}

int main() {
    SqList L;
    initList(&L);

    insert(&L, 1, 1); // 插入元素
    insert(&L, 2, 3); // 插入元素
    insert(&L, 3, 5); // 插入元素

    printList(&L); // 打印顺序表中的所有元素

    return 0;
}

输出结果如下:

[1, 3, 5]

示例2:删除元素

下面是一个示例代码,展示如何删除顺序表中的元素。

#include <stdio.h>
#include <stdlib.h>

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

typedef struct {
    int data[MAXSIZE]; // 存储数据元素的数组
    int length; // 顺序表的长度
} SqList;

void initList(SqList *L) {
    L->length = 0; // 初始时长度为0
}

int delete(SqList *L, int i) {
    if (i < 1 || i > L->length) { // 判断i的合法性
        return 0; // 删除失败
    }
    for (int j = i-1; j < L->length-1; j++) { // 从前往后移动元素
        L->data[j] = L->data[j+1];
    }
    L->length--; // 顺序表长度减少1
    return 1; // 删除成功
}

void printList(SqList *L) {
    printf("[");

    for (int i = 0; i < L->length; i++) {
        printf("%d", L->data[i]);
        if (i != L->length - 1) {
            printf(", ");
        }
    }

    printf("]\n");
}

int main() {
    SqList L;
    initList(&L);

    insert(&L, 1, 1); // 插入元素
    insert(&L, 2, 3); // 插入元素
    insert(&L, 3, 5); // 插入元素

    delete(&L, 2); // 删除元素

    printList(&L); // 打印顺序表中的所有元素

    return 0;
}

输出结果如下:

[1, 5]

总结

本文介绍了利用C语言实现顺序表的操作,包括初始化顺序表、插入元素、删除元素、查找元素、修改元素和打印顺序表中的所有元素。这些操作是实现各种数据结构的基础,熟练掌握这些操作能够帮助我们更好地理解和处理数据结构中的各种问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用C语言实现顺序表的实例操作 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 关于Python的异常捕获和处理

    下面是关于Python的异常捕获和处理的完整攻略: 异常捕获和处理 在Python中,异常是指程序在运行时遇到的错误或异常状况,这可能导致程序终止运行或运行出现意料之外的结果。为了增强程序的稳定性和可靠性,我们通常在编写Python代码时使用异常捕获和处理机制来处理异常情况,让程序更具鲁棒性。 常见的异常类型 在Python中,常见的异常类型包括: 异常名称…

    C 2023年5月23日
    00
  • C++ 继承详解及实例代码

    C++ 继承详解及实例代码 什么是继承 继承是一种面向对象编程中常用的技术,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。继承使得代码重用和维护变得更加容易,同时还可以提供多态行为和高层次的抽象。 继承的类型 C++ 支持以下几种继承类型: 公有继承(public inheritance) 私有继承(private inheri…

    C 2023年5月24日
    00
  • C++实现简单的学生成绩管理系统

    C++实现简单的学生成绩管理系统攻略 系统功能概述 一般的学生成绩管理系统包含以下功能: 添加学生及其成绩信息 删除学生及其成绩信息 查询学生及其成绩信息 修改学生及其成绩信息 统计分析学生信息 保存和读取数据 开发环境配置 操作系统:Windows、Linux、macOS等 编译器:GCC、Microsoft Visual C++等 集成开发环境(IDE)…

    C 2023年5月23日
    00
  • 查找算法之二分查找的C++实现

    查找算法之二分查找的C++实现 什么是二分查找? 二分查找(Binary Search),也叫折半查找,是一种在有序数组中查找某一特定元素的查找算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为…

    C 2023年5月22日
    00
  • C++使用jsoncpp解析json的方法示例

    下面是“C++使用jsoncpp解析json的方法示例”的完整攻略。 1.前言 在开发过程中,经常需要使用json来进行数据交互。本文主要介绍如何在C++中使用jsoncpp库来解析json数据。 2.环境 操作系统:Windows/Linux 编译器:gcc/g++/VS jsoncpp库 3.安装jsoncpp库 jsoncpp库是一个用来解析json的…

    C 2023年5月23日
    00
  • C语言传递指向常量的指针

    下面详细讲解C语言中传递指向常量的指针的完整使用攻略。 什么是指向常量的指针? 指向常量的指针是指在指针声明中加上const关键字,以表明该指针指向的变量是不可变的,如下所示: const int *ptr; 上述代码表示ptr是一个指向常量整型数的指针,即指向的变量是不可变的。 如何传递指向常量的指针? 在函数声明中,我们可以使用const关键字来表明参数…

    C 2023年5月9日
    00
  • CMakeList中自动编译protobuf文件过程

    当使用Protobuf数据交换格式时,我们需要将.proto文件编译为相应的C++类才能在代码中使用它们。CMake是常用的构建工具之一,它具有内置的支持来自动生成Protobuf源代码。 以下是在CMakeList中自动编译protobuf文件的完整攻略: 步骤 1:从Google官网下载Protobuf 要在CMakeList中自动编译protobuf文…

    C 2023年5月23日
    00
  • OpenCV mask的作用及如何制作掩模mask

    OpenCV的mask是一个二进制图像,用于控制对另一个图像的操作。在图像处理中,掩模通常被用于选择感兴趣区域(ROI)或执行像素级别的操作,如图像增强、滤波、混合等。 制作掩模实际上就是创建一个二值图像,其中像素值为0或255(黑或白),作用是将掩模图像中为255的像素区域与原图像中对应位置的像素进行操作,在区域内进行所需的图像处理操作。 下面我们以制作掩…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部