C++学习(二十九)(C语言部分)之 顺序表
一、数据结构
组织 存放数据的方式
精心选择的数据结构可以提升效率
数据结构 1、逻辑结构
一对多关系 父与子
一对一关系 排队中
多对多关系 两地的路线
2、存储结构
数据存放的位置关系
顺序存储数据 一个挨着一个的存储(数组)
链式存储方式
二、线性表
逻辑方面是线性关系 一对一线性 每一个元素有唯一的前驱和后继
顺序存储的线性表 就是顺序表
链式存储的线性表 就是链表
三、顺序表
主要实现方式---->数组/动态数组
顺序存储的线型表
数据结构--->为了管理数据
对数据进行操作--->增加 删除 查找 修改
附:
静态数组(定义的大小固定)
数组已满 就不能存放数据
动态数组
数组满 --->分配新的内存(申请更大的空间存储数据)
实现 用malloc申请内存
测试代码笔记如下:
#include<stdio.h>
struct LIST //定义结构体
{
int arr[]; //存放数据的数组
int size; //数组中最多能够存多少元素
int len; //数组中已经存了多少元素
}; //初始化函数
void main(struct LIST*p)
{
//刚开始表中没有数据
p->len = ;
p->size = ; //最多可以存的数据
} //增加数据
void insert(struct LIST*p,int data)
{
//直接插入末尾
if (p->len < p->size) //说明顺序表没有满
{
p->arr[p->len] = data; //根据数组的下标判断 len知道的是最后一个元素的下一个位置
p->len++;
//两行等价于p->arr[p->len++]=data;
}
} //插入到中间 插入到前面
void instert_middle(struct LIST*p, int data, int index) //index是下标 插入到下标所在位置
{
if (p->len < p->size) //说明顺序表没有满
{
if (index >= && index < p->len)
{
//可以先插入到这个位置
//先腾出一个位置
for (int i = p->len; i>index; --i)
{
p->arr[i] = p->arr[i - ]; //元素往后移动
}
p->arr[index] = data; //插入到这个位置
p->len++; //插入了一个元素 所以让它加1
}
else
{
p->arr[p->len++] = data; //否则插入尾部
}
}
} //查找 一个一个找
int search(struct LIST*p, int data)
{
for (int i = ; i < p->len; ++i)
{
if (data == p->arr[i])
{
return i; //找到了return下标
}
}
return -; //不存在这个位置
} //修改数据
void change(struct LIST*p,int data,int newData)
{
//根据学生的名字查找
for (int i = ; i < p->len; ++i)
{
if (data == p->arr[i]); //找到了就修改
{
p->arr[i] = newData; //学生名字 字符数组 比较用什么 strcmp string.h
break; //如果有多个相同数据都要修改 去掉break
}
}
} //删除数据 删除就是覆盖 循环
void dele(struct LIST*p, int data)
{
for (int i = ; i < p -> len; ++i)
{
if (data == p->arr[i]) //找到位置 开始删除
{
for (int j = i; j < p->len-; ++j) //从前往后
{
p->arr[j] = p->arr[j + ];
}
p->len--;
break;
}
}
} int main()
{
#if 0
int x, y, z;
int k;
printf("%p,%p,%p,%p", &x, &y, &z, &k);
#endif #if 1
/*
示例:
存放同学的信息 学号+姓名
一个班级100个同学 +插班生 +转班生
150--70
字符数组 字符串
char arr[100]="hello world";//数组大小 数组有效元素11个字符
\0 前面是有效数据 后面是无效数据 这个只限于字符数组
顺序表中 1.有多少个数据 2.可以放多少个数据
int brr[100]={1,2,34};
//有3个数据 最多可以放100个数据 默认不考虑数据重复问题
*/
struct LIST list; //定义一个顺序表
init(&list); //调用函数初始化
insert(&list, );
instert_middle(&list, , ); //插入的数据是3 插到下标为4的位置
#endif
getchar();
return ;
}
2019-03-30 09:17:07
C++学习(二十九)(C语言部分)之 顺序表的更多相关文章
- 前端学习(二十九)nodejs(笔记)
后台语言 java php .Net python Node.js------------------------------------------------- ...
- ElasticSearch7.3学习(二十九)----聚合实战之使用Java api实现电视案例
一.数据准备 创建索引及映射 建立价格.颜色.品牌.售卖日期字段 PUT /tvs PUT /tvs/_mapping { "properties": { "price& ...
- Java开发学习(二十九)----Maven依赖传递、可选依赖、排除依赖解析
现在的项目一般是拆分成一个个独立的模块,当在其他项目中想要使用独立出来的这些模块,只需要在其pom.xml使用<dependency>标签来进行jar包的引入即可. <depende ...
- ballerina 学习二十九 数据库操作
ballerina 数据操作也是比较方便的,官方也我们提供了数据操作的抽象,但是我们还是依赖数据库驱动的. 数据库驱动还是jdbc模式的 项目准备 项目结构 ├── mysql_demo │ ├── ...
- python学习 (二十九) range函数
1:list函数可以将其他类型转成list. print(list(range(0, 10))) 2: list函数把元组转成list t = (1, 3, 3, 5) print(list(t)) ...
- 渗透测试学习 二十九、kali安装,信息搜集,服务器扫描
kali安装,信息搜集,服务器扫描 kali介绍 Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统.由Offensive Security Ltd维护和资助.最先由 ...
- Salesforce LWC学习(二十九) getRecordNotifyChange(LDS拓展增强篇)
本篇参考: https://developer.salesforce.com/docs/component-library/documentation/en/lwc/data_ui_api https ...
- Bootstrap <基础二十九>面板(Panels)
Bootstrap 面板(Panels).面板组件用于把 DOM 组件插入到一个盒子中.创建一个基本的面板,只需要向 <div> 元素添加 class .panel 和 class .pa ...
- Web 开发人员和设计师必读文章推荐【系列二十九】
<Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- mysql进阶(二十九)常用函数
mysql进阶(二十九)常用函数 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP ...
随机推荐
- Laravel 更新数据时在表单请求验证中排除自己,检查指定字段唯一性
原文地址:https://moell.cn/article/24 不错的laravel网站 需求场景 修改用户信息时,在表单请求验证中排除当前邮箱所在的记录行,并检查邮箱的唯一性. Laravel版本 ...
- Linux运维工程师需要掌握什么才能胜任工作呢
万丈高楼平地起,所有一切的高深的技术都离不开最基本的技术,那么作为运维工程师的你,什么是最基本的技术呢,毫无疑问是Linux,Linux 是你所有一切技术的根源,试想一下如果你连基础的操作命令都不知道 ...
- [POJ3378]Crazy Thairs
Problem 给你一个数列,让你求由五个元素组成的顺序对的个数. Solution DP:用DP[i][j]表示把第j个作为五元组中第i个的方案数 则DP[i][j]=sum{DP[k][j-1]} ...
- nginx+vue刷新404
问题原因:刷新页面时访问的资源在服务端找不到,因为vue-router设置的路径不是真实存在的路径.如上的404现象,是因为在nginx配置的根目录/Data/app/xqsj_wx/dist下面压根 ...
- 【资料收集】QT学习资料
几个专栏 Qt学习之路(3):Hello, world!(续) - 豆子空间 - 51CTO技术博客 http://devbean.blog.51cto.com/448512/194137 Qt 学习 ...
- leetcode python 005
## 给定字符串,寻找最长回文子串## 单回文,双回文 def findh(s): ## 单回文 ld,l=[],len(s) if len(s)<3: re ...
- http响应头
If-Modified-Since标签,下图可以看出requestHeader中有If-Modified-Since
- java 移动开发获取多级下拉框json数据的类和mobile-select-area插件
我这里以行政区划做例子 //这个类是把数据库中的行政区划转化为json格式的data @SuppressWarnings("rawtypes")public class XzqhL ...
- Appium 自带的定位工具 Inspector
前言:Appium Inspector是appium自带的一个元素定位工具 一.设置appium 1.点开android setting界面(机器人图标) 2.勾选Application Path,添 ...
- day 67 django 之ORM 增删改查基础
一 操作基础前提准备 1. 新建django 项目 mysite 子项目app01 ,选择好做路径. 2 .2-1在app01 下面models 中引用 模块 from django.db im ...