一、数据结构
组织 存放数据的方式
精心选择的数据结构可以提升效率
数据结构 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语言部分)之 顺序表的更多相关文章

  1. 前端学习(二十九)nodejs(笔记)

    后台语言    java     php     .Net     python    Node.js------------------------------------------------- ...

  2. ElasticSearch7.3学习(二十九)----聚合实战之使用Java api实现电视案例

    一.数据准备 创建索引及映射 建立价格.颜色.品牌.售卖日期字段 PUT /tvs PUT /tvs/_mapping { "properties": { "price& ...

  3. Java开发学习(二十九)----Maven依赖传递、可选依赖、排除依赖解析

    现在的项目一般是拆分成一个个独立的模块,当在其他项目中想要使用独立出来的这些模块,只需要在其pom.xml使用<dependency>标签来进行jar包的引入即可. <depende ...

  4. ballerina 学习二十九 数据库操作

    ballerina 数据操作也是比较方便的,官方也我们提供了数据操作的抽象,但是我们还是依赖数据库驱动的. 数据库驱动还是jdbc模式的 项目准备 项目结构 ├── mysql_demo │ ├── ...

  5. python学习 (二十九) range函数

    1:list函数可以将其他类型转成list. print(list(range(0, 10))) 2: list函数把元组转成list t = (1, 3, 3, 5) print(list(t)) ...

  6. 渗透测试学习 二十九、kali安装,信息搜集,服务器扫描

    kali安装,信息搜集,服务器扫描 kali介绍 Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统.由Offensive Security Ltd维护和资助.最先由 ...

  7. Salesforce LWC学习(二十九) getRecordNotifyChange(LDS拓展增强篇)

    本篇参考: https://developer.salesforce.com/docs/component-library/documentation/en/lwc/data_ui_api https ...

  8. Bootstrap <基础二十九>面板(Panels)

    Bootstrap 面板(Panels).面板组件用于把 DOM 组件插入到一个盒子中.创建一个基本的面板,只需要向 <div> 元素添加 class .panel 和 class .pa ...

  9. Web 开发人员和设计师必读文章推荐【系列二十九】

    <Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  10. mysql进阶(二十九)常用函数

    mysql进阶(二十九)常用函数 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP ...

随机推荐

  1. 【Loadrunner_Http接口】使用Loadrunner对天气信息的接口编写脚本

    方法一:使用get请求 Action() { //http接口访问,get请求 web_url("www.abc.com", "URL=http://v.juhe.cn/ ...

  2. MAVEN 创建 JAR项目

    从Maven模板创建一个项目 在终端或命令提示(windows)中,浏览到要创建JAVA项目的文件夹下 键入如下命令: mvn archetype:generate -DgroupId={projec ...

  3. js 小说格式整理

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...

  4. python 类方法中参数使用默认值的方法

    class A(): __init__(self, **arg): self.__dict__.update(arg)        def M(self, config=None, section= ...

  5. java中JDBC连接数据库操作的基本步骤

    JDBC基本步骤 创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lan ...

  6. HotSpot虚拟机对象探秘

    参考:http://www.infoq.com/cn/articles/jvm-hotspot

  7. Jdbc连接Oracle12C集群环境

    jdbc.url=jdbc:Oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.31.0. ...

  8. 數據庫ORACLE轉MYSQL存儲過程遇到的坑~(總結)

    ORACLE數據庫轉MySQL數據庫遇到的坑 總結 最近在做Oracle轉mysql的工程,遇到的坑是真的多,尤其是存儲過程,以前都沒接觸過類似的知識,最近也差不多轉完了就總結一下.希望能幫到一些人( ...

  9. Mysql中contact、group_concat、concat_ws、repeat

    一.CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. mysql> select concat('11','22',' ...

  10. 服务器由于redis未授权访问漏洞被攻击

    昨天阿里云拦截到了一次异常登陆,改了密码后就没有管他, 今天阿里云给我发消息说我的服务器可能被黑客利用,存在恶意发包行为....... 不过我不打算只是单纯的重置系统,经过一系列的查找原因后,发现被攻 ...