数据结构顺序表基本操作(C/C++实现)

数据结构顺序表基本操作(C/C++实现)数据结构顺序表基本操作 C C 实现 涉及基本运算初始化顺序表 L 依次插入 abcde 元素输出顺序表 L 输出顺序表 L 的长度判断顺序表 L 是否为空输出顺序表 L 的第 3 个元素输出元素 a 的位置在第 4 个元素位置上插入 f 元素输出顺序表 L 删除顺序表 L 的第 3 个元素输出顺序表 L 释放顺序表 LGitHub 地址 包含 cpp 文件和可执行程序 exe 我的数据结构 GitHub 地址源代码 经 VS2

数据结构顺序表基本操作(C/C++实现)

注意:本代码为了测试运行默认含有操作所需数据,如有需要可自己增删改相关数据

涉及基本运算

  1. 初始化顺序表
  2. 依次插入元素
  3. 输出顺序表
  4. 输出顺序表的长度
  5. 判断顺序表是否为空
  6. 输出顺序表的第n个元素
  7. 输出元素x的位置
  8. 在第n个元素位置上插入x元素
  9. 输出顺序表
  10. 删除顺序表的第n个元素
  11. 输出顺序表
  12. 释放顺序表

GitHub地址(包含.cpp文件和可执行程序exe)

我的数据结构GitHub地址

源代码(经VS2015、devC++编译器运行通过)

#include "stdio.h"  #include "stdlib.h"  #include "io.h"  #include "math.h"  #include "time.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 20 /* 存储空间初始分配量 */ typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */ typedef char ElemType; /* ElemType类型根据实际情况而定,这里假设为int */ Status visit(ElemType c) { 
    printf("%c ", c); return OK; } typedef struct { 
    ElemType data[MAXSIZE]; /* 数组,存储数据元素 */ int length; /* 线性表当前长度 */ }SqList; /* 1.初始化顺序线性表 */ Status InitList(SqList *L) { 
    L->length = 0; return OK; } /* 2.初始条件:顺序线性表L已存在,1≤i≤ListLength(L), */ /* 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 */ Status ListInsert(SqList *L, int i, ElemType e) { 
    int k; if (L->length == MAXSIZE) /* 顺序线性表已经满 */ return ERROR; if (i<1 || i>L->length + 1)/* 当i比第一位置小或者比最后一位置后一位置还要大时 */ return ERROR; if (i <= L->length) /* 若插入数据位置不在表尾 */ { 
    for (k = L->length - 1; k >= i - 1; k--) /* 将要插入位置之后的数据元素向后移动一位 */ L->data[k + 1] = L->data[k]; } L->data[i - 1] = e; /* 将新元素插入 */ L->length++; return OK; } /* 3.初始条件:顺序线性表L已存在 */ /* 操作结果:依次对L的每个数据元素输出 */ Status ListTraverse(SqList L) { 
    int i; for (i = 0; i<L.length; i++) visit(L.data[i]); printf("\n"); return OK; } /* 4.初始条件:顺序线性表L已存在。 操作结果:返回L中数据元素个数 */ int ListLength(SqList L) { 
    return L.length; } /* 5.初始条件:顺序线性表L已存在。 操作结果:若L为空表,则返回TRUE,否则返回FALSE */ Status ListEmpty(SqList L) { 
    if (L.length == 0) return TRUE; else return FALSE; } /* 6.初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */ /* 操作结果:用e返回L中第i个数据元素的值,注意i是指位置,第1个位置的数组是从0开始 */ Status GetElem(SqList L, int i, ElemType *e) { 
    if (L.length == 0 || i<1 || i>L.length) return ERROR; *e = L.data[i - 1]; return OK; } /* 7.初始条件:顺序线性表L已存在 */ /* 操作结果:返回L中第1个与e满足关系的数据元素的位序。 */ /* 若这样的数据元素不存在,则返回值为0 */ int LocateElem(SqList L, ElemType e) { 
    int i; if (L.length == 0) return 0; for (i = 0; i<L.length; i++) { 
    if (L.data[i] == e) break; } if (i >= L.length) return 0; return i + 1; } /* 初始条件:顺序线性表L已存在。 操作结果:将L重置为空表 */ Status ClearList(SqList *L) { 
    L->length = 0; return OK; } /* 10.初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */ /* 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1 */ Status ListDelete(SqList *L, int i, ElemType *e) { 
    int k; if (L->length == 0) /* 线性表为空 */ return ERROR; if (i<1 || i>L->length) /* 删除位置不正确 */ return ERROR; *e = L->data[i - 1]; if (i<L->length) /* 如果删除不是最后位置 */ { 
    for (k = i; k<L->length; k++)/* 将删除位置后继元素前移 */ L->data[k - 1] = L->data[k]; } L->length--; return OK; } void unionL(SqList *La, SqList Lb) { 
    int La_len, Lb_len, i; ElemType e; La_len = ListLength(*La); Lb_len = ListLength(Lb); for (i = 1; i <= Lb_len; i++) { 
    GetElem(Lb, i, &e); if (!LocateElem(*La, e)) ListInsert(La, ++La_len, e); } } int main() { 
    SqList L; SqList Lb; ElemType e; Status i; int j, k; /*1.初始化*/ i = InitList(&L); printf("1.初始化L后:L.length=%d\n", L.length); /*2.依次插入abcde*/ i = ListInsert(&L, 1, 'e'); i = ListInsert(&L, 1, 'd'); i = ListInsert(&L, 1, 'c'); i = ListInsert(&L, 1, 'b'); i = ListInsert(&L, 1, 'a'); printf("2.abcde插入执行完毕\n"); /*3.输出顺序表*/ printf("3.在L的表头依次插入a~e后:L.data=\n"); ListTraverse(L); /*4.顺序表长度*/ printf("4.L.length=%d \n", L.length); /*5.判空*/ i = ListEmpty(L); printf("5.L是否空:i=%d(1:是 0:否)\n", i); /*6.输出顺序表L的第三个元素*/ GetElem(L, 3, &e); printf("6.第3个元素的值为:%c\n", e); /*7.输出顺序表a的位置*/ int l = LocateElem(L, 'a'); printf("7.返回元素a的位序:%d\n", l); /*8.在第4个元素位置上插入f元素*/ i = ListInsert(&L, 5, 'f'); printf("8.在第4个元素位置上插入f元素执行完毕\n", L.length); /*9.输出顺序表*/ printf("9.在L的第4个元素位置上插入f元素后:L.data=\n"); ListTraverse(L); /*10.删除顺序表L的第三个元素*/ i = ListDelete(&L, 3, &e); /* 删除第j个数据 */ if (i == ERROR) printf("删除第%d个数据失败\n", 3); else printf("10.删除第个的元素成功\n"); /*11.输出顺序表L*/ printf("11.输出顺序表\n"); ListTraverse(L); /*12.释放顺序表*/ i = ClearList(&L); printf("释放顺序表执行完毕\n"); system("pause"); return 0; } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215710.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午1:37
下一篇 2026年3月18日 下午1:37


相关推荐

  • Java八大基本数据类型

    Java八大基本数据类型前言 做一下笔记 Java 基本数据类型图 整数类型 byte1 字节 8 位 最大存储数据量是 255 存放的数据范围是 128 127 之间 构造方法 publicByte bytevalue 构建了一个新分配的 Byte 表示指定的 byte 价值 参数 value 被 Byte 所代表的值 publicByte Strings throwsNumber 构建了一个新分配的 Byte 表示 byte 值表示的 String 参数 字符串转换成完全由基数 10

    2026年3月26日
    2
  • CenterOS7安装redis

    CenterOS7安装redisCenterOS7 安装 redis 记录大佬 redis 安装文章地址 https blog csdn net zhangxtn article details

    2025年6月12日
    5
  • Java并发:整理自《Java并发编程实战》和《Java并发编程的艺术》

    Java并发:整理自《Java并发编程实战》和《Java并发编程的艺术》声明 Java 并发的内容是自己阅读 Java 并发编程实战 和 Java 并发编程的艺术 整理来的 图文并茂请戳思维导图下载请戳目录 1 基础概念 2 线程 3 锁 4 同步器 5 并发容器和框架 6 Java 并发工具类 7 原子操作类 8 Executor 框架 执行机制 9 其他 一 基础概念 1 可见性和原子性可见性 一个线程

    2026年3月17日
    2
  • 关于libtorrent库的安装

    关于libtorrent库的安装前言 前段时间由于工作需要 在 Python 的 web 开发框架 Django 中使用到了 libtorrent 这个 C 扩展库来解析链接或种子数据 特了解和尝试了 libtorrent 库的安装 一般情况下 为了方便 Python 解释器版本和依赖库的管理 python 项目都是工作在虚拟环境之下 在此情况下 便出现了一个挺严重的问题 C 编写的 libtorrent 库如何引入到虚拟环境之中 综述 首先

    2026年3月18日
    2
  • c语言中(int)什么意思_c语言中怎么用int转化char

    c语言中(int)什么意思_c语言中怎么用int转化char1、int;int是C++关键字,表示整型,其大小是32位有符号整型,表示的范围是-2,147,483,648 到2,147,483,647;在声明和定义变量时使用,它表示的意思是所声明或所定义的变量为整型变量。如果其用于函数参数时,其传递方向为值传递,即只能将实参的值传递给形参,而不能将形参的值传递给实参。例如:通过这种方式去进行交换两个数是无法达到目的的。例子1:#include&…

    2022年8月18日
    9
  • java个人微信消息接收_java接口接收json数据

    java个人微信消息接收_java接口接收json数据微信公众平台java服务器认证、接收文本消息和图片消息并实现返回,订阅服务号实现了通过微信接收信息转发至java后台解析并回复的消息的简单功能,贡献出代码希望能给大家一个参考

    2022年8月21日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号