数据结构——顺序表(C语言版)

顺序表是数据结构中最基本的一种线性表,它以一段连续的存储空间来存储数据元素,元素之间的顺序由它们在内存中的位置来决定。在C语言中,我们通常使用数组来实现顺序表。

目录

顺序表的结构定义

顺序表的基本操作

应用实例


顺序表的结构定义

首先,我们需要定义一个结构体来表示顺序表,包括数据元素数组和当前元素个数等信息:

cpp 复制代码
#define MAX_SIZE 100 // 定义顺序表的最大容量

typedef struct {
    int data[MAX_SIZE]; // 数据元素数组
    int length; // 当前元素个数
} SeqList;
顺序表的基本操作
  1. 初始化顺序表

    cpp 复制代码
    void initSeqList(SeqList *L) {
     L->length = 0;
    }
  2. 插入元素

    cpp 复制代码
    int insert(SeqList *L, int index, int element) {
     if (index < 0 || index > L->length || L->length == MAX_SIZE) {
         return 0; // 插入失败
     }
     for (int i = L->length - 1; i >= index; i--) {
         L->data[i + 1] = L->data[i];
     }
     L->data[index] = element;
     L->length++;
     return 1; // 插入成功
    }
  3. 删除元素

    cpp 复制代码
    int delete(SeqList *L, int index) {
     if (index < 0 || index >= L->length) {
         return 0; // 删除失败
     }
     for (int i = index; i < L->length - 1; i++) {
         L->data[i] = L->data[i + 1];
     }
     L->length--;
     return 1; // 删除成功
    }
  4. 查找元素

    cpp 复制代码
    int search(SeqList L, int element) {
     for (int i = 0; i < L.length; i++) {
         if (L.data[i] == element) {
             return i; // 返回元素位置
         }
     }
     return -1; // 元素不存在
    }
应用实例
cpp 复制代码
#include <stdio.h>

int main() {
    SeqList list;
    initSeqList(&list);

    insert(&list, 0, 10);
    insert(&list, 1, 20);
    insert(&list, 2, 30);

    printf("顺序表中的元素为: ");
    for (int i = 0; i < list.length; i++) {
        printf("%d ", list.data[i]);
    }
    printf("\\n");

    delete(&list, 1);

    printf("删除元素后的顺序表为: ");
    for (int i = 0; i < list.length; i++) {
        printf("%d ", list.data[i]);
    }
    printf("\\n");

    int index = search(list, 30);
    if (index != -1) {
        printf("元素30的位置为: %d\\n", index);
    } else {
        printf("元素30不存在\\n");
    }

    return 0;
}

通过以上实现,我们可以在C语言中创建、插入、删除和查找顺序表中的元素。顺序表的简单实现不仅有助于理解数据结构的基本概念,还可以为解决实际问题提供基础。

顺序表作为线性表的开头部分,对于我们后续学习数据结构中还是很重要的,需要我们把它学好,本篇文章也只是点了一下知识点并给出少许例子,更多的知识还需要我们自己去探索学习!

感谢观看,还请点一个小小的赞吧!!!

相关推荐
1白天的黑夜116 分钟前
链表-143.重排链表-力扣(LeetCode)
数据结构·leetcode·链表
Ustinian_31019 分钟前
【C/C++】For 循环展开与性能优化【附代码讲解】
c语言·开发语言·c++
牵牛老人29 分钟前
Qt 插件开发全解析:从接口定义,插件封装,插件调用到插件间的通信
开发语言·qt
钮钴禄·爱因斯晨32 分钟前
AIGC浪潮下,风靡全球的Mcp到底是什么?一文讲懂,技术小白都知道!!
开发语言·人工智能·深度学习·神经网络·生成对抗网络·aigc
22jimmy2 小时前
JavaWeb(二)CSS
java·开发语言·前端·css·入门·基础
机器视觉知识推荐、就业指导4 小时前
面试问题详解五:Qt 信号与槽的动态管理
开发语言·qt
四维碎片10 小时前
【Qt】线程池与全局信号实现异步协作
开发语言·qt·ui·visual studio
IT码农-爱吃辣条10 小时前
Three.js 初级教程大全
开发语言·javascript·three.js
☺����11 小时前
实现自己的AI视频监控系统-第一章-视频拉流与解码2
开发语言·人工智能·python·音视频
月盈缺11 小时前
学习嵌入式的第二十二天——数据结构——双向链表
数据结构·学习·链表