静态&动态分配线性表

简介: 数据结构静态&动态分配线性表

@[toc]

线性表定义

线性表的顺序存储又称顺序表,它是用一组地址连续的存储单元依次存储线性表中的数据元素,从而是的逻辑上相邻的两个元素在物理位置上也相邻。顺序表的特点:表中元素的逻辑顺序和物理顺序相同对以为线性表可以进行动态分配内存和静态分配内存

静态分配线性表

  • 在静态分配时,由于数组的大小和空间事先已经固定,一旦空间占满,将会发生溢出

//

// Created by getup on 2021/2/16.

//

#include <iostream>

usingnamespacestd;

#include <stdio.h>

#define InitSize 10  //顺序表的初始长度

typedefstruct{

   int*data;    //指示动态分配数组的指针

   intMaxSize ;       //顺序表的最大容量

   //  int data[MaxSize];//用静态的数组存放数据元素

   intlength;       //顺序表的当前长度

}Seqlist;              //顺序表的类型定义

//基本操作---初始化一个顺序表

voidInitList(Seqlist&L){

  //用malloc函申请一篇连续的存储空间

  L.data=(int*)malloc(InitSize*sizeof(int));

  L.length=0;

  L.MaxSize=InitSize;

}

//增加动态数组的长度

voidIncreaseSize(Seqlist&L,intlen){

   int*p=L.data;

   L.data=(int*)malloc((L.MaxSize+len)*sizeof(int));

   for(inti=0;i<L.length;i++)

   {

       L.data[i]=p[i];

   }

   L.MaxSize=L.MaxSize+len;

   free(p);

}

intmain() {

   SeqlistL;         //声明一个顺序表

   InitList(L);      //初始化顺序表

   IncreaseSize(L,5);//插入5个元素

   for(inti=2;i<=5;i++)

       printf("data[%d]=%d\n",i,L.data[i]);

   return0;

}

动态分配线性表

  • 在动态分配时,存储数组的空间是在程序执行过程中通过动态存储语句分配的,不会发生溢出

//

// Created by getup on 2021/2/16.

//

#include <iostream>

usingnamespacestd;

#include <stdio.h>

#define InitSize 10  //顺序表的初始长度

typedefstruct{

   int*data;    //指示动态分配数组的指针

   intMaxSize ;       //顺序表的最大容量

   //  int data[MaxSize];//用静态的数组存放数据元素

   intlength;       //顺序表的当前长度

}Seqlist;              //顺序表的类型定义

//基本操作---初始化一个顺序表

voidInitList(Seqlist&L){

   //用malloc函申请一篇连续的存储空间

   L.data=(int*)malloc(InitSize*sizeof(int));

   L.length=0;

   L.MaxSize=InitSize;

}

//增加动态数组的长度

voidIncreaseSize(Seqlist&L,intlen){

   int*p=L.data;

   L.data=(int*)malloc((L.MaxSize+len)*sizeof(int));

   for(inti=0;i<L.length;i++)

   {

       L.data[i]=p[i];

   }

   L.MaxSize=L.MaxSize+len;

   free(p);

}

intmain() {

   SeqlistL;         //声明一个顺序表

   InitList(L);      //初始化顺序表

   IncreaseSize(L,5);//插入5个元素

   for(inti=2;i<=5;i++)

       printf("data[%d]=%d\n",i,L.data[i]);

   return0;

}

相关文章
动态和静态顺序表【线性表(一)】
线性表实现(一) 线性表可以考虑用顺序表、链表来实现。顺序表可以考虑静态、动态实现。 静态的顺序表有点像数组; 动态的就直接用malloc分配内存。分配完了,操作过程可以跟静态数组差不多,也可以考虑用指针。
884 0
|
存储 编译器 C++
数组动态分配与静态分配的区别
数组动态分配与静态分配的区别
450 0
|
程序员 编译器
动态内存与静态内存的区别
1. 静态内存 静态内存是指在程序开始运行时由编译器分配的内存,它的分配是在程序开始编译时完成的,不占用CPU资源。 程序中的各种变量,在编译时系统已经为其分配了所需的内存空间,当该变量在作用域内使用完毕时,系统会 自动释放所占用的内存空间。
1594 0
|
机器学习/深度学习 C语言
【C 语言】二级指针案例 ( 多级指针内存释放问题 | 多级指针避免野指针 )
【C 语言】二级指针案例 ( 多级指针内存释放问题 | 多级指针避免野指针 )
516 0
【C 语言】二级指针案例 ( 多级指针内存释放问题 | 多级指针避免野指针 )
|
存储 算法 C语言
【数据结构和算法】实现线性表中的静态、动态顺序表(上)
【数据结构和算法】实现线性表中的静态、动态顺序表
|
存储 算法
【数据结构和算法】实现线性表中的静态、动态顺序表(下)
【数据结构和算法】实现线性表中的静态、动态顺序表(下)
|
4月前
|
存储 C语言 索引
你真的了解线性表中的顺序表了吗?(静态与动态顺序)
你真的了解线性表中的顺序表了吗?(静态与动态顺序)
71 0
|
存储 编译器 C++
【C/C++】 静态内存分配与动态内存分配
C/C++ 中静态内存分配与动态内存分配相关内容,区别与比较
390 0
|
机器学习/深度学习 人工智能 C#
C#<数据结构>栈的应用——括号分配问题
C#<数据结构>栈的应用——括号分配问题
87 0
|
C语言
【C 语言】二级指针 内存模型图 ( 指针数组 | 二维数组 | 自定义二级指针内存 )
【C 语言】二级指针 内存模型图 ( 指针数组 | 二维数组 | 自定义二级指针内存 )
206 0
【C 语言】二级指针 内存模型图 ( 指针数组 | 二维数组 | 自定义二级指针内存 )

热门文章

最新文章