静态&动态分配线性表

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

@[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;

}

相关文章
|
6月前
|
存储 JavaScript 前端开发
什么是堆?什么是栈?他们之间从区别和联系
什么是堆?什么是栈?他们之间从区别和联系
304 0
|
存储 编译器 C语言
深入理解C++内存管理:指针、引用和内存分配(下)
深入理解C++内存管理:指针、引用和内存分配
|
25天前
|
存储 Rust C#
内存指针解引用
【10月更文挑战第14天】
30 1
|
1月前
|
存储 C语言 索引
你真的了解线性表中的顺序表了吗?(静态与动态顺序)
你真的了解线性表中的顺序表了吗?(静态与动态顺序)
44 0
|
5月前
|
算法
数据结构和算法学习记录——特殊线性表之栈(上)-栈的概念、栈的结构、链式栈数组栈、栈的结构体定义、栈的基本接口函数、栈顶初始化函数
数据结构和算法学习记录——特殊线性表之栈(上)-栈的概念、栈的结构、链式栈数组栈、栈的结构体定义、栈的基本接口函数、栈顶初始化函数
32 0
|
存储 Java 编译器
深入理解C++内存管理:指针、引用和内存分配(上)
深入理解C++内存管理:指针、引用和内存分配
|
存储 算法
【数据结构和算法】实现线性表中的静态、动态顺序表(下)
【数据结构和算法】实现线性表中的静态、动态顺序表(下)
|
存储 算法 C语言
【数据结构和算法】实现线性表中的静态、动态顺序表(上)
【数据结构和算法】实现线性表中的静态、动态顺序表
指针指向空间的申请和释放易错点
指针指向空间的申请和释放易错点