C++学习(二十九)(C语言部分)之 顺序表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++学习(二十九)(C语言部分)之 顺序表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2754字,纯文字阅读大概需要4分钟。
内容图文
一、数据结构
组织 存放数据的方式
精心选择的数据结构可以提升效率
数据结构 1、逻辑结构
一对多关系 父与子
一对一关系 排队中
多对多关系 两地的路线
2、存储结构
数据存放的位置关系
顺序存储数据 一个挨着一个的存储(数组)
链式存储方式
二、线性表
逻辑方面是线性关系 一对一线性 每一个元素有唯一的前驱和后继
顺序存储的线性表 就是顺序表
链式存储的线性表 就是链表
三、顺序表
主要实现方式---->数组/动态数组
顺序存储的线型表
数据结构--->为了管理数据
对数据进行操作--->增加 删除 查找 修改
附:
静态数组(定义的大小固定)
数组已满 就不能存放数据
动态数组
数组满 --->分配新的内存(申请更大的空间存储数据)
实现 用malloc申请内存
测试代码笔记如下:
1 #include<stdio.h> 2struct LIST //定义结构体 3{ 4int arr[20]; //存放数据的数组 5int size; //数组中最多能够存多少元素 6int len; //数组中已经存了多少元素 7}; 8 9//初始化函数 10void main(struct LIST*p) 11{ 12//刚开始表中没有数据 13 p->len = 0; 14 p->size = 20; //最多可以存的数据 15} 16 17//增加数据 18void insert(struct LIST*p,int data) 19{ 20//直接插入末尾 21if (p->len < p->size) //说明顺序表没有满 22 { 23 p->arr[p->len] = data; //根据数组的下标判断 len知道的是最后一个元素的下一个位置 24 p->len++; 25//两行等价于p->arr[p->len++]=data; 26 } 27} 28 29//插入到中间 插入到前面 30void instert_middle(struct LIST*p, int data, int index) //index是下标 插入到下标所在位置 31{ 32if (p->len < p->size) //说明顺序表没有满 33 { 34if (index >= 0 && index < p->len) 35 { 36//可以先插入到这个位置 37//先腾出一个位置 38for (int i = p->len; i>index; --i) 39 { 40 p->arr[i] = p->arr[i - 1]; //元素往后移动 41 } 42 p->arr[index] = data; //插入到这个位置 43 p->len++; //插入了一个元素 所以让它加1 44 } 45else 46 { 47 p->arr[p->len++] = data; //否则插入尾部 48 } 49 } 50} 51 52//查找 一个一个找 53int search(struct LIST*p, int data) 54{ 55for (int i = 0; i < p->len; ++i) 56 { 57if (data == p->arr[i]) 58 { 59return i; //找到了return下标 60 } 61 } 62return -1; //不存在这个位置 63} 64 65//修改数据 66void change(struct LIST*p,int data,int newData) 67{ 68//根据学生的名字查找 69for (int i = 0; i < p->len; ++i) 70 { 71if (data == p->arr[i]); //找到了就修改 72 { 73 p->arr[i] = newData; //学生名字 字符数组 比较用什么 strcmp string.h 74break; //如果有多个相同数据都要修改 去掉break 75 } 76 } 77} 78 79//删除数据 删除就是覆盖 循环 80void dele(struct LIST*p, int data) 81{ 82for (int i = 0; i < p -> len; ++i) 83 { 84if (data == p->arr[i]) //找到位置 开始删除 85 { 86for (int j = i; j < p->len-1; ++j) //从前往后 87 { 88 p->arr[j] = p->arr[j + 1]; 89 } 90 p->len--; 91break; 92 } 93 } 94} 95 96int main() 97{ 98#if 0 99int x, y, z; 100int k; 101 printf("%p,%p,%p,%p", &x, &y, &z, &k); 102#endif103104#if 1 105/*106示例: 107 存放同学的信息 学号+姓名 108一个班级100个同学 +插班生 +转班生 109150--70 110字符数组 字符串 111char arr[100]="hello world";//数组大小 数组有效元素11个字符 112\0 前面是有效数据 后面是无效数据 这个只限于字符数组 113顺序表中 1.有多少个数据 2.可以放多少个数据 114int brr[100]={1,2,34}; 115//有3个数据 最多可以放100个数据 116117默认不考虑数据重复问题 118*/119struct LIST list; //定义一个顺序表120 init(&list); //调用函数初始化121 insert(&list, 2); 122 instert_middle(&list, 3, 4); //插入的数据是3 插到下标为4的位置123#endif124 getchar(); 125return0; 126 }
2019-03-30 09:17:07
原文:https://www.cnblogs.com/Yuuki-/p/10625299.html
内容总结
以上是互联网集市为您收集整理的C++学习(二十九)(C语言部分)之 顺序表全部内容,希望文章能够帮你解决C++学习(二十九)(C语言部分)之 顺序表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。