数据结构概念及连续存储数组的算法演示
一、数据结构的概念:
我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个功能(比如查找某个元素,删除某个元素,对所有元素进行排序),而执行的相应操作,这个相应的操作也叫做算法。
数据结构 = 个体的存储 + 个体的关系存储
算法 = 对存储数据的操作
二、什么是线性结构?
简单来讲,线性结构就是把所有的结点用一根直线连接起来,它分为:连续存储(数组)和离散存储(链表),今天就来学一下连续存储数组的算法演示,下面来看一段代码:
#include <stdio.h>struct arr {int *pbase; //存储的是数组第一个元素的地址int len; //数组所能容纳的最大元素的个数int cnt; //当前数组有效元素的个数 }; void init_arr(struct arr array); int main(void) {struct arr ar;init_arr(ar);printf("%d\n",ar.len);return 0; } void init_arr(struct arr array) {array.len = 99; }
运行结果如下:
程序说明:这里得到的结果跟我想像的结果有点不一样,我们原本是让len 的结果输出结果为99,但是这里显示的结果却为0,这是为什么呢?原因是这样的,因为在一开始之前len他就已经有一个垃圾值了(是任意一个数),但是我们上面通过一个函数来试图修改它的值,由于不知道他的具体地址在哪里,所以我们赋予它99这个值,只是修改函数里面这个局部变量的值,并没有修改到len的值,当这个函数被调用到主函数中,这个局部变量也就失去了它的作用了(也就是说对主函数中的变量修改起不到作用),所有要通过函数来修改主函数中的len,我们必须使用指针来操作:
#include <stdio.h> struct arr {int *pbase;int len;int cnt; }; void init_arr(struct arr *array); int main(void) {struct arr ar;init_arr(&ar);printf("%d\n",ar.len);return 0; } void init_arr(struct arr *array) {(*array).len = 99; //(*array)=ar }
运行结果如下:
可以通过运行结果可以看出我们修改成功了。
#include <stdio.h> #include <malloc.h> #include <stdlib.h> struct arr {int *pbase;int len;int cnt; }; void init_arr(struct arr *array,int length); bool is_empty(struct arr *array); void show_arr(struct arr *array);int main(void) {struct arr ar;init_arr(&ar,6);is_empty(&ar);show_arr(&ar);printf("%d\n",ar.len);return 0; } void init_arr(struct arr *array,int length) {array->pbase = (int *)malloc(sizeof(int )*length);if(NULL == array->pbase){printf("the give is failure\n");exit(-1);}else {array->len = length;array->cnt =0;}return; } bool is_empty(struct arr *array) {if(array->cnt == 0){return true;}elsereturn false; } void show_arr(struct arr *array) {int i=0;if(is_empty(array)){printf("the array is empyt\n");} else{for(i=0;i<array->cnt;++i){printf("%d",array->pbase[i]);}printf("\n");} }
转载于:https://www.cnblogs.com/1121518wo/p/10891823.html
数据结构概念及连续存储数组的算法演示相关推荐
- 线性结构 -- 连续存储(数组), 1个简单的c语言代码实现.
数据结构大体成上可以分成两种: 1. 线性结构. 2. 非线性结构( 树,图) 1. 什么是线性结构 大概上可以这样定义: 加入所有的节点可以用一条直线连接起来. 就是线性结构... 2 ...
- (2)连续存储数组的方法
目录 连续存储的代表应用:数组 1)结构体的定义: 2)基本操作 对数据进行初始化 判断数组是否为空 输出数组 判断数组是否满 追加元素 插入数组元素 删除数组元素 逆序 对数组进行排序 这篇笔记是根 ...
- 【数据结构Note4】-串、数组和广义表(kmp算法详解)
文章目录 串.数组和广义表 1. 串 1.1 串的概念和结构 1.2 顺序串和链串 1.3 BF算法--串的模式匹配法之一 1.5 KMP算法--串的模式匹配法之一 1.5.1 next数组 1.5. ...
- 算法学习-零子数组,最大连续子数组
题目 对于长度为N的数组A,求连续子数组的和最接近0的值. 如: 数组A:1,-2,3,10,-4,7,2,-5 它是所有子数组中,和最接近0的是哪个? 算法流程 申请比A长1的空间sum[-1,0, ...
- 数据结构 - 链表 - 面试中常见的链表算法题
数据结构 - 链表 - 面试中常见的链表算法题 数据结构是面试中必定考查的知识点,面试者需要掌握几种经典的数据结构:线性表(数组.链表).栈与队列.树(二叉树.二叉查找树.平衡二叉树.红黑树).图. ...
- .net 遍历数组找重复值写入一个新数组_面试 | 数组类算法精析
点击上方蓝字设为星标 每周一.三.五上午 8:30 准时推送 下面开始今天的学习- 面试中的算法问题,有很多并不需要复杂的数据结构支撑.就是用数组,就能考察出很多东西了.其实,经典的排序问题,二分搜索 ...
- 数据结构 - 二叉树 - 面试中常见的二叉树算法题
数据结构 - 二叉树 - 面试中常见的二叉树算法题 数据结构是面试中必定考查的知识点,面试者需要掌握几种经典的数据结构:线性表(数组.链表).栈与队列.树(二叉树.二叉查找树.平衡二叉树.红黑树).图 ...
- 数据结构——马踏棋盘题解(贪心算法)
本文转自: https://blog.csdn.net/qq_41596568/article/details/83060317 数据结构--马踏棋盘题解(贪心算法) 使用循环建立棋盘与权值棋盘(权值 ...
- Algorithm:【Algorithm算法进阶之路】之数据结构二十多种算法演示
Algorithm:[Algorithm算法进阶之路]之数据结构二十多种算法演示 目录 一.数据结构算法 1.顺序表 2.链表 3.栈和队列 4.串的模式匹配 5.稀疏矩阵 6.广义表 7.二叉树 8 ...
最新文章
- springboot热部署工具
- 关闭Eclipse光标悬浮自动提示
- 即时大数据流处理=即时风暴
- iptables filter表案例/iptables nat表应用
- 一个简单CI/CD流程的思考
- 定时任务@Scheduled(cron = “* * * * * *?“) 表达式详解
- intellij自动补全变量名和变量属性
- 【LeetCode】整数反转【不能借助辅助空间,需要处理溢出】
- 要买多少路由器? 水题.
- 分享一病毒源代码,破坏MBR,危险!!仅供学习参考,勿运行(vc++2010已编译通过)
- 获取打开的记事本中的内容 - 回复 ymg1103 的问题
- 公关,从讲好一个故事开始
- 工作室课题—质因数2
- Hashtable的用法
- 码元、波特、速率、带宽-王道计算机网络
- ST MCU的国产替代
- 国产开源网络编程框架t-io使用必备:极速开发器Tio.java
- Windows下安装EISeg交互式分割标注软件
- 华为海思麒麟搭载鸿蒙系统,麒麟芯片只供华为使用 华为P40将搭载鸿蒙系统
- 怎样不用鼠标,完全只靠键盘操作电脑?