数据结构(顺序表)

文章目录

  • 一、线性表
    • 1、线性表
      • 1.1、线性表的定义
      • 1.2、线性表的操作
    • 2、顺序表
      • 2.1、顺序表的实现--静态分配
      • 2.2、顺序表的实现--动态分配
      • 2.2、顺序表的特点
    • 3、顺序表的基本操作
      • 3.1、插入操作
      • 3.2、删除操作
      • 3.3、查找操作
        • 3.2、按位查找
        • 3.2、按值查找

一、线性表

1、线性表

1.1、线性表的定义

在这里插入图片描述
在这里插入图片描述

1.2、线性表的操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、顺序表

在这里插入图片描述

2.1、顺序表的实现–静态分配

静态的数组分配后固定不变
在这里插入图片描述
Sq:sequence–顺序,序列

#include<stdio.h>
#define MaxSize 10typedef struct{int data[MaxSize];int length;
}SqList;void InitList(SqList &L){for(int i=0;i<MaxSize;i++){L.data[i]=0;}L.length=0;
}
int main(){SqList L;InitList(L);for(int i=0;i<MaxSize;i++)printf("data=%d\n",L.data[i]);return 0;
} 

在这里插入图片描述

2.2、顺序表的实现–动态分配

在这里插入图片描述

#include<stdlib.h>
#define InitSize 10//结构体 
typedef struct{int *data;int MaxSize;int length;
}SeqList;//初始化顺序表 
void InitList(SeqList &L){L.data=(int *)malloc(InitSize*sizeof(int));L.MaxSize=InitSize;L.length=0;
}
//增加长度操作
void IncreaseSize(SeqList &L,int len){int *p=L.data;L.data=(int *)malloc((InitSize+len)*sizeof(int));//将以前的数据复制到新区域for(int i=0;i<L.length;i++){L.data[i]=p[i];} L.MaxSize=L.MaxSize+len;//销毁无效区域 free(p);
}int main(){SeqList L;InitList(L);IncreaseSize(L,5);return 0;
}

在这里插入图片描述

2.2、顺序表的特点

在这里插入图片描述

3、顺序表的基本操作

3.1、插入操作

在这里插入图片描述

#include<stdlib.h>
#include<stdio.h>
#define InitSize 10
#define MaxSize 10
typedef struct{int *data;int length;
}SqList;//初始化顺序表
void InitList(SqList &L){L.data=(int *)malloc(sizeof(int)*InitSize);L.length=0;
} //顺序表插入
bool ListInsert(SqList &L,int i,int e){//为了代码的健壮性,判断i的范围是否有效if(i<1||i>L.length+1)return false;//判断存储空间是否已满 if(L.length>=MaxSize)return false; //i及其i之后数据向后移动一位for(int j=L.length;j>=i;j--){L.data[j]=L.data[j-1];} //赋值L.data[i-1]=e; //长度+1L.length=L.length+1; return true;
} 
int main(){SqList L;InitList(L);//给顺序表赋值for(int i=0;i<5;i++){L.data[i]=i+1;L.length++;} ListInsert(L,3,3);for(int i=0;i<=5;i++){printf("%d\n",L.data[i]);} return 0;
}

在这里插入图片描述
在这里插入图片描述
插入操作的时间复杂度:
在这里插入图片描述

3.2、删除操作

在这里插入图片描述

#include<stdlib.h>
#include<stdio.h>
#define InitSize 10
#define MaxSize 10
typedef struct{int *data;int length;
}SqList;//初始化顺序表
void InitList(SqList &L){L.data=(int *)malloc(sizeof(int)*InitSize);L.length=0;
} //顺序表插入
bool ListInsert(SqList &L,int i,int e){//为了代码的健壮性,判断i的范围是否有效if(i<1||i>L.length+1)return false;//判断存储空间是否已满 if(L.length>=MaxSize)return false; //i及其i之后数据向后移动一位for(int j=L.length;j>=i;j--){L.data[j]=L.data[j-1];} //赋值L.data[i-1]=e; //长度+1L.length++; return true;
} 
//顺序表删除
bool ListDelete(SqList &L,int i,int &e){//判断合法性if(i<1||i>L.length+1)return false;e=L.data[i-1];for(int j=i;j<L.length;j++){L.data[j-1]=L.data[j];}L.length--;return true;
} 
int main(){int e=-1;SqList L;InitList(L);//给顺序表赋值for(int i=0;i<5;i++){L.data[i]=i+1;L.length++;} ListInsert(L,3,3);ListDelete(L,5,e);for(int i=0;i<L.length;i++){printf("%d\n",L.data[i]);} printf("delete data = %d",e);return 0;
}

删除操作的时间复杂度:
在这里插入图片描述

3.3、查找操作

3.2、按位查找

在这里插入图片描述
请添加图片描述
在这里插入图片描述
按位查找的时间复杂度
在这里插入图片描述

3.2、按值查找

在这里插入图片描述

#include<stdlib.h>
#include<stdio.h>
#define InitSize 10typedef struct{int *data;int MaxSize;int length;
}SeqList;//初始化顺序表
void InitList(SeqList &L){L.data=(int *)malloc(sizeof(int)*InitSize);L.length=0;L.MaxSize=InitSize;
} 
//按值查找
int LocateElem(SeqList L,int e){for(int i=0;i<L.length;i++){if(L.data[i]==e)return i+1;}return 0;
} 
int main(){SeqList L;InitList(L);//给顺序表赋值for(int i=0;i<5;i++){L.data[i]=i+1;L.length++;} int number=LocateElem(L,3);printf("%d",number);return 0;
}

在这里插入图片描述
结构类型比较:
在这里插入图片描述
时间复杂度
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/434151.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

keil使用教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据 总结 前言 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重…

【教程】MobaXterm软件Keygen快速生成注册码

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 1、去官网安装正版软件&#xff0c;比如23.6版本的&#xff1a;MobaXterm free Xserver and tabbed SSH client for Windows 2、打开这个网站&#xff0c;输入信息&#xff1a;MobaXterm Keygen 3、将自动下载的C…

LeetCode:1706. 球会落何处(Java 模拟)

目录 1706. 球会落何处 题目描述&#xff1a; 实现代码与解析&#xff1a; 原理思路&#xff1a; 1706. 球会落何处 题目描述&#xff1a; 用一个大小为 m x n 的二维网格 grid 表示一个箱子。你有 n 颗球。箱子的顶部和底部都是开着的。 箱子中的每个单元格都有一个对角线…

Linux系统——函数与数组

目录 一、函数 1.函数的定义 2.使用函数 3.定义函数的方法 4.函数举例 4.1判断操作系统 4.2判断ip地址 5.查看函数列表 6.删除函数 7.函数返回值——Return 8.函数的作用范围 9.函数传参 10.函数递归 10.1病毒 10.2阶乘 10.2.1 用for循环 10.2.2函数阶乘 10.…

一篇文章带你了解C++中隐含的this指针

文章目录 一、this指针的引出二、this指针的特性【面试题】 一、this指针的引出 我们先来定义一个日期类Date&#xff0c;下面这段代码执行的结果是什么呢&#xff1f; class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}v…

VMware虚拟机部署Linux Ubuntu系统

本文介绍基于VMware Workstation Pro虚拟机软件&#xff0c;配置Linux Ubuntu操作系统环境的方法。 首先&#xff0c;我们需要进行VMware Workstation Pro虚拟机软件的下载与安装。需要注意的是&#xff0c;VMware Workstation Pro软件是一个收费软件&#xff0c;而互联网中有很…

6.【SpringBoot3】登录优化-redis

1. SpringBoot 集成 redis 示例 在之前实现的登录接口中&#xff0c;用户登录成功后会生成一个令牌响应给浏览器&#xff0c;之后浏览器访问其他接口时&#xff0c;都要携带该令牌&#xff0c;接受拦截器的检验&#xff0c;如果令牌有效就放行&#xff0c;允许访问后续接口&am…

SpringBoot之分页查询的使用

背景 在业务中我们在前端总是需要展示数据&#xff0c;将后端得到的数据进行分页处理&#xff0c;通过pagehelper实现动态的分页查询&#xff0c;将查询页数和分页数通过前端发送到后端&#xff0c;后端使用pagehelper&#xff0c;底层是封装threadlocal得到页数和分页数并动态…

【开源】基于JAVA+Vue+SpringBoot的用户画像活动推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 兴趣标签模块2.3 活动档案模块2.4 活动报名模块2.5 活动留言模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 数据流程设计3.4 E-R图设计 四、系统展示五、核心代码5.1 查询兴趣标签5.2 查询活动推荐…

Procexp64.exe —— 强大的进程管理器

1&#xff0c;简介 Process Explorer 是一款增强型的任务管理器&#xff0c;你可以使用它方便地管理你的程序进程&#xff0c;能强行关闭任何程序。 除此之外&#xff0c;它还详尽地显示计算机信息&#xff1a;CPU、内存使用情况&#xff0c;DLL、句柄信息&#xff0c;很酷的…

大创项目推荐 题目:基于大数据的用户画像分析系统 数据分析 开题

文章目录 1 前言2 用户画像分析概述2.1 用户画像构建的相关技术2.2 标签体系2.3 标签优先级 3 实站 - 百货商场用户画像描述与价值分析3.1 数据格式3.2 数据预处理3.3 会员年龄构成3.4 订单占比 消费画像3.5 季度偏好画像3.6 会员用户画像与特征3.6.1 构建会员用户业务特征标签…