顺序表Sqlist.cpp

文章目录

  • 顺序表Sqlist.cpp
    • 1 顺序表插入逻辑
    • 2 顺序表删除逻辑
    • 3 代码演示
    • 4 运行结果

1 顺序表插入逻辑

在表的第 i 个位置前插入一个元素

  • 实现步骤:

    1. 将第 n 至第 i 位的元素向后移动一个位置;
    2. 将要插入的元素写到第 i 个位置;
    3. 表长加1。

    注意:事先应判断: 插入位置i 是否合法?表是否已满?

    应当符合条件:1≤i≤n+1 或 i=[1, n+1]

插入时的平均移动次数为:n (n+1) / 2 ÷(n+1)=n/2≈O(n)


2 顺序表删除逻辑

删除线性表的第i个位置上的元素

  • 实现步骤:

    1. 将第 i+1 至第 n 位的元素向前移动一个位置;
    2. 表长减1。

注意:事先需要判断,删除位置i 是否合法?

顺序表删除一元素的时间效率为: T(n) = (n-1) / 2 ≈ O(n)

顺序表插入、删除算法的平均空间复杂度为 O(1)


3 代码演示

以下代码创建了一个顺序表,以随机数的方式给顺序表赋初值,实现了基本的插入,删除,遍历

#include <stdlib.h>
#include <time.h>
#define MAXSIZE (10)
#define OK (1)
#define ERROR (0)typedef int ElementType;
typedef struct ArrayList {ElementType data[MAXSIZE];int length;
} *List;List CreateList(void)        //创建顺序表,初始化
{List L = (List)malloc(sizeof(struct ArrayList));L->length = 0;return L;
}void InitList(List L)     //给顺序表赋初值
{srand((unsigned)(time(NULL)));for (int i = 0; i < MAXSIZE / 2; i++) {     L->data[i] = rand()%71+20;L->length++;}
}int Insert(List L, int position, ElementType e)
{if (position < 1 || position > L->length + 1) {return ERROR;}if (L->length == MAXSIZE) {return ERROR;}for (int i = L->length - 1; i >= position - 1; i--) {L->data[i + 1] = L->data[i];}L->data[position - 1] = e;L->length++;return OK;
}int Delete(List L, int position, ElementType *e)
{if (position < 1 || position > L->length) {return ERROR;}*e = L->data[position - 1];for (int i = position - 1; i <= L->length - 1; i++) {L->data[i] = L->data[i + 1];}L->length--;return OK;
}void PrtList(List L)
{for (int i = 0; i <= L->length - 1; i++) {printf("%d ", L->data[i]);}printf("\n");
}int main(void)
{int position;int e;List L = CreateList();InitList(L);PrtList(L);printf("\nplease input (position & element) to insert:");scanf("%d %d", &position, &e);if (Insert(L, position, e)) {printf("OK\n");PrtList(L);} else {printf("ERROR\n");}printf("please input (position) to delete:");scanf("%d", &position);if (Delete(L, position, &e)) {printf("OK\n");PrtList(L);} else {printf("ERROR\n");}
}

4 运行结果

顺序表Sqlist.cpp相关推荐

  1. 非递减有序排列C语言,非递减有序顺序表的排序

    由于编者水平有限,如有错误,请多多包涵. /* File name: Example.cpp Description: 非递减有序线性表LA, 非递减有序线性表LB, 要求排序后存放在LC中,且LC元 ...

  2. 数据结构 创建顺序表

    3.18数据结构--创建顺序表 运行结果截图: #define _CRT_SECURE_NO_WARNINGS #define MAXSIZE 100 #include<stdio.h> ...

  3. 顺序表(线性表的顺序存储)---C语言版

    目录 顺序表 一.顺序表的定义 二.顺序表上基本操作的具体实现 1.`InitList_Sq(*L)`:初始化表.构造一个空的顺序表. 分类一:主函数里声明的是一个指向顺序表的指针 分类二:主函数里声 ...

  4. 6-2 有序顺序表的插入

    本题要求实现递增顺序表的有序插入函数.L是一个递增的有序顺序表,函数Status ListInsert_SortedSq(SqList &L, ElemType e)用于向顺序表中按递增的顺序 ...

  5. 顺序表——有序顺序表的插入

    本题要求实现递增顺序表的有序插入函数.L是一个递增的有序顺序表,函数Status ListInsert_SortedSq(SqList &L, ElemType e)用于向顺序表中按递增的顺序 ...

  6. 顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换

    顺序表ADT模板设计及简单应用:将顺序表中前 m 个元素和后 n 个元素进行互换 作者: 冯向阳 时间限制: 1S 章节: DS:线性表 问题描述 : 目的:使用自行设计的顺序表ADT或STL中的ve ...

  7. 顺序表的查找C语言数据结构

    在顺序表中查找元素 大致代码片有注释,若还有疑问,可进行评论 #include<stdio.h> #include<stdlib.h>#define Maxsize 10 // ...

  8. c语言顺序表所需的头文件,数据结构【顺序表】

    1.线性表定义 线性表是一种线性结构.线性结构的特点是数据元素之间是一种线性关系,数据元素"一个接一个的排列".在一个线性表中数据元素的类型是相同的,或者说线性表是由同一类型的数据 ...

  9. 6-2 有序顺序表的插入 (10 分)

    6-2 有序顺序表的插入 (10 分) 本题要求实现递增顺序表的有序插入函数.L是一个递增的有序顺序表,函数Status ListInsert_SortedSq(SqList &L, Elem ...

最新文章

  1. 用于道路目标检测的少镜头学习
  2. ScribeFireBlog 发的一篇在Cnblogs的日志
  3. java B2B2C 源码多租户电子商城系统-Spring Cloud组件详解
  4. 【手写系列】纯手写实现一个高可用的RPC
  5. iptables之iptables命令详解
  6. html 编辑xml,编辑XML\HTML时取消浏览“amp”
  7. python知识点汇总百度文库_PYTHON知识点汇总.doc
  8. 使用 Spring Boot Security 进行安全控制
  9. 来谈谈Spring构造函数注入的循环依赖问题
  10. 数据传输服务 DTS > 数据迁移 > 支持的数据库和迁移类型
  11. python函数装饰器详解_Python语言函数装饰器用法实例详解
  12. Inno Setup 6.0.3+ 简体中文语言包
  13. ipv6的127位掩码如何表示_详解IP地址、子网掩码、网络号、主机号、网络地址、主机地址...
  14. 小马哥-----高仿苹果6 plus刷机 详细拆机主板图与开机界面图与移植触摸屏版中文rec 界面 多图展示
  15. 微信公众号文章音视频下载的几种办法-涵盖PC端和手机端
  16. 集群服务器中定时任务多次执行的解决方案
  17. 【续】数学模型——人口增长模型
  18. 20条非常实用的Python代码实例
  19. spark专业术语解释
  20. 零中频接收机频率转换图_低成本ADS-B接收机去混合技术

热门文章

  1. 深入理解Linux内核链表
  2. Linux shell sed awk
  3. oppo专用计算机,OPPO手机助手
  4. php 解压dat,电脑微信dat文件怎么打开
  5. 内核链表list.h文件剖析
  6. python获取目录树_Python读取文件目录树——os.walk
  7. PyTorch的nn.Linear()详解
  8. LeetCode 2195. 向数组中追加 K 个整数(贪心)
  9. LeetCode 1985. 找出数组中的第 K 大整数(排序)
  10. LeetCode 1942. 最小未被占据椅子的编号(set)