顺序表的静态分配与动态分配

一、什么是顺序表

线性表的顺序表示,将线性表的数据元素用地址连续发存储单元依次存储。

二、静态分配(C语言)

#include <stdio.h>
#define Maxsize 10 //定义一个最大长度
typdef struct{
  int data[MaxAize];
  int length;
  }Sqlist;  //定义一个Sqlist型的变量,一个该变量个共有4*11B,这也就是我们的顺序表。

Void InitList(Sqlist &L){  
  for(int i=0;i<MaxSize;i++)
    L.data[i]=0;  //for循环起到将内存中“脏数据”清除的作用,如过正确访问,这段可以不要。
  L.length=0;
}
//这里按照命名规范,编了一个叫做IntList的函数,用来初始化顺序表。
inr main(){
  Sqlist L; //声明一个顺序表L。
  InitList(L);  //初始化该顺序表。
  for(int i=0;i<length;i++)
    printf("data[%d]=%d\n",i,L.data[i]);
  return 0;
}

三、动态分配

malloc函数介绍:
L.data=(ElemType*)malloc(sizeof(ElemType)*lnitsize);

malloc函数会生成一个指针,在这里我们使用强制转换将其生成指针转型为定义的数据元素类型指针,并赋给L.data指针。
在malloc后面的括号中,用ElemType类型数据大小×前面所需要的存储空间(Initsize)。申请一片该大小的连续空间。
注意:malloc和free的头文件都是#include<stdlib.h>

(C语言)动态分配
#include<stdlib.h>
#define InitSize 10;  //默认的最大长度

定义结构体

typedef struct{
  int *data;  //指示动态分配数组的指针
  int MaxSize;  //顺序表最大容量
  int length;  //顺序表当前长度
}SeqList;  //定义一个Sqlist型的变量

初始化线性表

void InitList(Seqlist &L){
  L.data=(int*)malloc(InitSize*sizeof(int));  //申请一片连续的存储空间。
  L.length=0;
  L.MaxSize=InitSize;
}

扩容

void IncreaseSize(SeqList &L,int len){
  int *p=L.data;  
  L.data=(int*)malloc((L.Maxsize+len)*sizeof(int));
  for(int i=0;i<L.length;i++){
    L.data[i]=p[i];  //将老地址的数据复制到新地址
  }
  L.MaxSize=L.MaxSize+len;  //将最大长度增加,注意这里,改变L下的MaxSize是地址传递,不需要返回值。
  free(p);  //释放原来内存空间。
}

主函数

int main(){
  Seqlist L;
  InitList(L);
  InctreaseSize(L,5);
  return 0;
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值