一、数据结构
组织 存放数据的方式
精心选择的数据结构可以提升效率
数据结构 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. python 列表切片

    列表切片是python语言独有的特征,大大方便了我们的编码. 首先,在介绍切片之前,必须要知道一个知识,就是python列表的读写,下标可以使用负数. insert,get,set 操作均可传入负数下 ...

  2. LY.JAVA面向对象编程.修饰符

    2018-07-18 09:20:25 /* 修饰符: 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 抽象修饰符:abstract 类: ...

  3. day25-python操作redis一

    1.     Python操作nosql数据库 NoSQL,泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2 ...

  4. SpringBoot入门示例

    SpringBoot入门Demo SpringBoot可以说是Spring的简化版.配置简单.使用方便.主要有以下几种特点: 创建独立的Spring应用程序 嵌入的Tomcat,无需部署WAR文件 简 ...

  5. day16 初识面向对象

    今天主要学习内容: 1.初始面向对象 2 .类 ,对象 3,面向对象和面向过程的对比 4.面向对象的三大特征 1,初始面向对象 面向过程 : 一切以实物的发展流程为中心 面向对象: 一切以对象为中心, ...

  6. java接口和抽象类的区别和作用(功能、用途、好处)

    Java接口: 总结了4点关于JAVA中接口存在的意义: 1.重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋 ...

  7. requests(第三方模块) 请求、登录、下载网页

    import requests  #http://docs.python-requests.org/en/latest/api/ 说明文档 ''' requests.request(method,ur ...

  8. (C/C++学习笔记) 三. 作用域和可见性

    三. 作用域和可见性 ● 标识符的作用域 标识符的作用域是标识符在程序源代码中的有效范围,从小到大分为函数原型作用域.块作用域(局部作用域),文件作用域(全局作用域). 1. 函数原型作用域 函数原型 ...

  9. css经验之谈

    //清除浮动 .clear { zoom:1; }.clear:after { content:''; display:block; clear:both; }.fl { float:left; }. ...

  10. MVC扩展之HtmlHelper辅助方法

    1.什么是HtmlHelper辅助方法?其实就是HtmlHelper类的扩展方法,如下所示: namespace System.Web.Mvc.Html { public static class F ...