线性表的顺序存储结构动态态分配C语言实现

线性表的顺序存储结构动态态分配C语言实现

初始化执行期间通过malloc函数为数组申请空间,程序运行期间若空间不够可通过realloc函数在保留原存储值的前提下为数组申请更大的连续存储的空间。

源代码如下:

#include

#include

#define initSize 1000

#define incSize 500//增大顺序表存储空间时每次的增长值

#define OVERFLOW 9999

#define ERROR -1

#define EMPTY -2

typedef int eleType;

typedef struct{

eleType *Delem;

int length;

}DList;

// 函数申明

void initList(DList *L);

void insertList(DList *L,int i,eleType e);

int listLength(DList L);

int getElem1(DList L,int i);

void getElem2(DList L,int i,eleType *e);

int locateElem(DList L,int e);

void listDelete(DList *L,int i,eleType *e);

void printList(DList L);

int emptyList(DList L);

void destroyList(DList *L);

int main(){

DList L;

initList(&L);

int e;

int i;

int o;

for(i=1;i<5;i++){

insertList(&L,i,i);

}

printList(L);

printf("Hello!\n");

int m = listLength(L);

printf("顺序表的长度:\t%d\n",m);

insertList(&L,2,22);

printList(L);

printf("第二个元素:%d\t\n",getElem1(L,1));

getElem2(L,2,&e);

printf("第三个元素:%d\t\n",e);

printf("元素4的index=%d\n",locateElem(L,4));

listDelete(&L,3,&o);

printf("删除的元素值:%d\n",o);

printList(L);

printf("%d\n",emptyList(L));

destroyList(&L);

return 0;

}

// 初始化链表

void initList(DList *L){

L->Delem = (eleType *)malloc(initSize *sizeof(eleType));

if(!L->Delem)

exit(OVERFLOW);

L->length = 0;

return;

}

void insertList(DList *L,int i,eleType e){

if(L->length == initSize){

eleType *p;

p = (eleType *)realloc(L->Delem,(initSize + incSize)*sizeof(eleType));

if(!p){// 未分配成功

exit(OVERFLOW);

}

L->Delem = p;// L->Delem 指向新申请的存储空间

L->length += incSize; //表长修改为新的存储空间可存放数据元素个数

}

//if(i<1 || i>L->length)

//exit(ERROR);

int j;

for(j=L->length-1;j>=i-1;j--)

L->Delem[j+1] = L->Delem[j];//从表尾开始插入位置,数据元素依次后移动一个位置

L->Delem[i-1] = e;

L->length++;

return;

}

// 求线性表的长度

int listLength(DList L){

return L.length;

}

// 获取线性表的第i个元素

int getElem1(DList L,int i){

if(i<0 || i>L.length)

exit(ERROR);

return L.Delem[i];

}

// 获取线性表的第i个元素

void getElem2(DList L,int i,eleType *e){

if(i<0 || i>L.length)

exit(ERROR);

*e = L.Delem[i];

return;

}

// 确定元素e是线性表中的第几个元素

int locateElem(DList L,int e){

int i;

for(i=0;i

if(L.Delem[i]==e)

break;

if(i!=L.length)

return i;

else

return 0;

}

//删除线性表中的第i个元素,将其放在变量e中

void listDelete(DList *L,int i,eleType *e){

if(L->length==0){

exit(EMPTY);

}

if(i<1 || i>L->length)

exit(ERROR);

*e = L->Delem[i-1];// 线性表中的第i个元素存放于变量e中

int j;

for(j=i-1; jlength-1; j++)

{//从第i个数据元素开始,依次将后面的元素前移一个位置

L->Delem[j] = L->Delem[j+1];

}

L->length--;

return;

}

//遍历线性表

void printList(DList L){

int i;

for( i=0;i

printf("%d\t",L.Delem[i]);

}

printf("\n");

}

//判断线性表为空,前提条件是线性表存在

int emptyList(DList L){

if(L.length > 0) return 1;

return 0;

}

//销毁线性表

void destroyList(DList *L){

if(!L->Delem)//没有可销毁的内容

exit(ERROR);

free(L->Delem);

L->length =0;

}

按照我们期望的运行结果

值得思考的是在insertList(DList *L,int i,eleType e)函数中有个完备性检查未能实现:

if(i<1 || i>L->length)

exit(ERROR);

通过静态分配和动态分配对比可知,共同点都是使用数组构造,逻辑基本相同,不同的就是,动态分配在原数组满了的情况下可以扩充,而静态的是数组存满就不能扩充了。大家可以思考两种分配方式中所用到的空间复杂度和时间复杂度。

线性表的顺序存储结构动态态分配C语言实现相关教程

一天一个机器学习小知识——线性回归

一天一个机器学习小知识——线性回归 文章目录 前言 一、算法推导 1.模型 2.策略 3.算法 二、应用场景 三、代码实现 1.导入相关库 2.读取样例数据 3.划分训练集和测试集 4.建立模型 5.评估模型 四、优缺点 1.优点 2.缺点 前言 本栏目主要介绍机器学习中的算法

flask使用七牛云存储图片并展示

flask使用七牛云存储图片并展示 注册七牛云,实名认证,点击对象存储,创建公开空间 找到python SDK,在项目下创建一个util.py文件,粘贴下去 util.py修改如下 from qiniu import Auth, put_file, etag, put_dataimport qiniu.configimport randomimport datet

数据结构(C语言版)——3.1、顺序栈实现

数据结构(C语言版)——3.1、顺序栈实现 3.1.1、顺序栈说明 和顺序表(线性表的顺序存储结构)类似。顺序栈即栈的顺序存储结构是利用一组地址连续的存储单元依次存放 自栈底 到栈顶 的数据元素,同时附设指针 toptoptop 指示栈顶元素在顺序栈中的位置。 通常

Java:String的不可变性理解以及存储问题

Java:String的不可变性理解以及存储问题 首先什么是String,其名为字符串(在c里没有,c++有),注意String不是基本数据类型,是引用类型(类),也就是说String str储存的是地址值,但当我们打印一个String时返回的却是一个字符串,这是因为打印时默认调用st

线性表的链式存储(业务结点和链表算法分离模式)

线性表的链式存储(业务结点和链表算法分离模式) 原有的链表结构体里添加了数据域,导致业务结点和算法逻辑耦合,虽然可以用typedef定义不同的数据类型,但是还是不太方便。参考了传智扫地僧相关源码 LinkListApi.h如下: //直接给返回一个句柄,内部有一个

ceph存储接口-S3API和rados

ceph存储接口-S3API和rados ceph常用的接口有librados和s3api,s3api与ceph对象网关RGW连接,往ceph集群存储数据,librados是对象网关RGW的下层,运行效率更高,性能更好。 使用librados可以操作ceph集群,它提供了存储,读取,删除,列出所有对象等功能。 在

数据在内存中的存储

数据在内存中的存储 一、数据类型可分为: ①内置类型 ②自定义类型 (1)常见的内置类型: char //字符数据类型 short //短整型 int //整形 long //长整型 long long //更长的整形 float //单精度浮点数 double //双精度整形 (2)自定义类型: 数组类型 结

深度学习之 LinearRegression(多元线性回归)

深度学习之 LinearRegression(多元线性回归) 深度学习之 LinearRegression(多元线性回归) 1、多线线性回归的实现 ? 跟简单线性回归一样都是y-x的映射关系,多元线性回归只是x是多个样本,简单线性回归就是y(预测) = ax(i) +b,而多元线性回归则是如下图。

c语言实现顺序存储程序,线性表的顺序存储结构动态态分配C语言实现相关推荐

  1. 《数据结构》c语言版学习笔记——线性表的顺序存储结构

    线性表的顺序存储结构 第一章 线性表的顺序存储结构 文章目录 线性表的顺序存储结构 前言 一.顺序存储结构的建立 1.条件 2.代码 二.顺序存储结构的获得元素 1.条件 2.代码 三.顺序存储结构的 ...

  2. 线性表:2.线性表的顺序存储结构--顺序表及C语言实现

    逻辑结构上呈线性分布的数据元素在实际的物理存储结构中也同样相互之间紧挨着,这种存储结构称为 线性表的顺序存储结构 . 也就是说,逻辑上具有线性关系的数据按照前后的次序全部存储在一整块连续的内存空间中, ...

  3. 实验报告微型计算机拆卸顺序表,实验一线性表的顺序存储结构实验报告页.doc...

    实验一线性表的顺序存储结构实验报告页.doc 1 攀 枝 花 学 院 实 验 报 告 实验课程 数据结构 实验项目线性表的顺序存储 实验日期 系 班级 姓名 学号 同组人 指导老师 成绩 实验目的1. ...

  4. 【数据结构】线性表的顺序存储结构及实现——C语言版

    文章目录 顺序表 1. 顺序表的存储结构定义 2. 顺序表的实现 2.1 初始化顺序表 2.2 建立顺序表 2.3 销毁顺序表 2.4 判空操作 2.5 求顺序表的长度 2.6 遍历操作 2.7 按值 ...

  5. 线性表的顺序存储结构之顺序表类的实现_Java

    在上一篇博文--线性表接口的实现_Java中,我们实现了线性表的接口,今天让我们来实现线性表的顺序存储结构--顺序表类. 首先让我们来看下顺序表的定义: 线性表的顺序存储是用一组连续的内存单元依次存放 ...

  6. 3、线性表的顺序存储结构(顺序表)

     线性表的顺序存储结构简称为顺序表.线性表的顺序存储结构是把线性表中的元素中的元素按照其逻辑顺序依次存储到计算机存储器中指定位置开始的一块连续的存储空间中,它直接将线性表的逻辑结构映射到存储结构上,既 ...

  7. 线性表的顺序存储结构——顺序表

    什么是线性表? 线性表简称表,是n(n>=0)个具有相同类型的数据元素的有限序列,线性表中数据元素的个数称为线性表的长度,长度为0的表称为空表. 什么是顺序表? 线性表的顺序存储结构称为顺序表. ...

  8. 线性表的顺序存储结构(C语言讲解)

    目录 1.顺序存储结构定义 线性表顺序储存的结构代码 数组长度与线性表的长度的区别 2.顺序存储结构获得元素操作 3.顺序存储结构插入操作 4.顺序存储结构删除操作 5.完整代码举例 1.顺序存储结构 ...

  9. 线性表的顺序存储结构(C语言实现)

    记录学习数据结构书籍<<大话数据结构>>的学习笔记. 线性表的顺序存储结构:用一段地址连续的存储单元依次存储线性表的数据元素 #include "stdio.h&qu ...

最新文章

  1. 解决geoserver跨域问题
  2. 企业官网建设注重这四点错不了!
  3. 2018java多线程面试题_2018JAVA面试题附答案
  4. 修改 oracle dbid,更改数据库DBID
  5. php前台用户权限开通,vue实现网站前台的权限管理
  6. 【Java】数组的注意事项
  7. DR5白金版 for mac(PS一键磨皮插件Delicious Retouch)支持ps 2022
  8. C# StreamReader.ReadLine统计行数的问题
  9. CTO视点 | 思科打造业界首个基于意图的开放性网络平台,释放无限机遇
  10. layUI数据表格可编辑扩展下拉框
  11. 运动目标跟踪(八)--时空上下文(STC)跟踪原理
  12. LNMP源码安装教程
  13. SET NOCOUNT
  14. mysql置疑原因_数据库置疑的处理办法
  15. PTA 求链式线性表的倒数第K项 给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
  16. 四、redi性能测试、协议、事务
  17. 华为机试---小东分苹果
  18. 解密红杉资本加密局,一个女人选择 ALL IN
  19. 真的!?在阅读体验感上赢过微信读书?
  20. 用户控制 阻止运行程序_阻止或允许您的孩子通过家长控制使用的程序

热门文章

  1. so文件的编译与使用
  2. 傅里叶变换和拉普拉斯变换的物理解释及区别
  3. HTTPS接口压测 --- hey工具
  4. sublimeText3配置sublimeLinter
  5. scratch学习_和 Vicky 一起学习 Scratch 系列之十三 — 作曲
  6. C++中怎么表示根号下的数字(用cmath中的sqrt()可以开根号)
  7. NOKOV度量动作捕捉用于多智能体协同系统等效验证实验
  8. 高数考研归纳 - 微分学 - 中值定理
  9. 机器学习图像特征提取—颜色(RGB、HSV、Lab)特征提取并绘制直方图
  10. SSD-6D: Making RGB-Based 3D Detection and 6D Pose Estimation Great Again—2017(笔记)