首页 > 其他分享 >顺序表——动态分配和静态分配

顺序表——动态分配和静态分配

时间:2023-10-23 14:32:26浏览次数:32  
标签:顺序 return 静态 MaxSize 动态分配 int length false data

静态分配

数组采用静态分配时,数组的大小和空间事先已经固定,一旦空间占满,再新加入数据就会溢出,导致程序崩溃。

1 //顺序表——静态分配 
 2 #include <stdio.h>
 3 #define MaxSize 10        //定义顺序表的最大长度 
 4 
 5 //定义
 6 typedef struct{
 7     int data[MaxSize];        //使用数组存放数据元素 
 8     int length;                //顺序表当前的长度 
 9 }SqList;
10 
11 //初始化——1、将顺序表的所有数据元素初始化为0;2、将顺序表的初始长度设为0 
12 void InitList(SqList &L){        //参数为SqList类型,需要& 
13     for(int i=0;i<MaxSize;i++){
14         L.data[i]=0;        //将顺序表的所有数据元素初始化为0
15     }
16     L.length=0;        //将顺序表的初始长度设为0
17 }
18 
19 //插入 ——在位置i插入元素e 
20 bool ListInsert(SqList &L,int i,int e){
21     if(i<1||i>L.length+1)
22         return false;
23     if(i>=MaxSize)
24         return false;
25     for(int j=L.length;j>=i;j--){
26         L.data[j]=L.data[j-1];        //最好时间复杂度为O(1),最坏和平均为O(n)
27     } 
28     L.data[i-1]=e;
29     L.length++;        //插入后表的长度+1 
30     return true;
31 } 
32 
33 //删除——删除第i个元素 
34 bool ListDelete(SqList &L,int i){
35     if(i<1||i>L.length)
36         return false;
37     for(int j=i;j<L.length;j++){
38         L.data[j-1]=L.data[j];        //最好时间复杂度为O(1),最坏和平均为O(n) 
39     } 
40     L.length--;
41     return true;
42 } 
43 
44 //查找——按值查找
45 int LocateElem(SqList L,int e){
46     for(int i=0;i<L.length;i++){
47         if(L.data[i]==e)
48             printf("该元素为第%d个元素",i+1);
49     }
50     return 0;
51 } 
52 int main(){
53     SqList L;            //定义 
54     InitList(L);        //初始化,此处不需要& 
55     ListInsert(L,1,5);    //在位置1插入元素5
56     ListInsert(L,2,6);    //在位置2插入元素6
57     for(int i=0;i<L.length;i++){
58         printf("插入后的顺序表第%d个元素为:%d\n",i,L.data[i]);
59     }
60     ListDelete(L,2);    //删除第2个元素 
61     for(int i=0;i<L.length;i++){
62         printf("删除后的顺序表为:%d\n",L.data[i]);
63     }
64     LocateElem(L,5);
65     return 0;
66 }

动态分配

数组采用动态分配时,空间在程序执行过程中可以通过动态存储分配语句分配,不需要一次性为线性表划分所有的空间。

1 //顺序表——动态分配
 2 #include <stdio.h>    
 3 #include <stdlib.h>        //使用malloc、free的头文件 
 4 #define InitSize 10        //默认最大长度 
 5 
 6 //定义
 7 typedef struct{
 8     int *data;        //指示动态数组的指针
 9     int MaxSize;    //顺序表的最大容量 
10     int length;     //顺序表的当前长度 
11 }SeqList;
12 
13 //初始化——使用malloc函数动态申请内存
14 void InitList(SeqList &L){
15     L.data=(int *)malloc(InitSize*sizeof(int));        //使用malloc函数动态申请内存
16     L.length=0;        //当前长度设为0 
17     L.MaxSize=InitSize;        //默认最大长度 
18 } 
19 
20 //动态增加数组长度
21 void IncreaseList(SeqList &L,int len){
22     int *p=L.data;        //将数组中的数据暂时存放到指针p
23     L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));        //重新申请内存
24     for(int i=0;i<L.length;i++){
25         L.data[i]=p[i];        //复制数据 
26     } 
27     L.MaxSize=L.MaxSize+len;
28     free(p); 
29 } 
30 
31 //插入
32 bool ListInsert(SeqList &L,int i,int e){
33     if(i<1||i>L.length+1)
34         return false;
35     if(i>=L.MaxSize)
36         return false;
37     for(int j=L.length;j>=i;j--){
38         L.data[j]=L.data[j-1];
39     }
40     L.data[i-1]=e;
41     L.length++;
42     return true;
43 } 
44 
45 //删除
46 bool ListDelete(SeqList &L,int i){
47     if(i<1||i>L.length)
48         return false;
49     for(int j=i;j<L.length;j++){
50         L.data[j-1]=L.data[j];
51     }
52     L.length--;
53     return true;
54 } 
55 
56 //按值查找
57 void LocateElem(SeqList L,int e){
58     for(int i=0;i<L.length;i++){
59         if(L.data[i]==e)
60             printf("元素%d是第%d个元素",e,i+1);
61     }
62 } 
63 int main(){
64     SeqList L;
65     InitList(L);
66 //    IncreaseList(L,10);    //动态增加数组长度
67     ListInsert(L,1,5);    //在位置1插入元素5
68     ListInsert(L,2,6);    //在位置2插入元素6
69     for(int i=0;i<L.length;i++){
70         printf("插入后的顺序表第%d个元素为:%d\n",i,L.data[i]);
71     }
72     ListDelete(L,2);    //删除第2个元素 
73     for(int i=0;i<L.length;i++){
74         printf("删除后的顺序表为:%d\n",L.data[i]);
75     }
76     LocateElem(L,5);
77     return 0;
78 }

 



标签:顺序,return,静态,MaxSize,动态分配,int,length,false,data
From: https://blog.51cto.com/zyj3955/7987182

相关文章

  • Debian12配置静态IP
    目录方法1方法2方法1rambo@test3:~$sudovim/etc/network/interfaces#追加如下内容........autoens33ifaceens33inetstaticaddress172.16.186.133netmask255.255.255.0gateway172.16.186.2dns-nameservers172.16.186.2rambo@test3:~$sudo......
  • Django配置静态文件方法(static)——导入jQuery和bootstrap
    1、首先在文件夹下创建static文件夹,并将导入文件下载并放入如图: 2、进入settings.py文件夹书写静态文件配置代码:#静态文件配置STATICFILES_DIRS=[os.path.join(BASE_DIR,'static'),] 3、进入前端页面书写如下代码载入:{%loadstatic%}<linkrel="sty......
  • 1402. 做菜顺序(前缀和、公式变形、动态规划、贪心)
     首先本题可以抽象为从原数组中选出一些子数组,并让这些子数组的(i)*a[i]的和最大解法:将原数组从大到小排序f[i]=i*a1+(i-1)*a2+...f[i-1]=(i-1)*a1+(i-2)*a2+...f[i]=f[i-1]+(a1+a2+....)//加上一个前缀和classSolutio......
  • VSCode配置Clang C/C++开发环境 [+clangd代码静态检查配置]
    问题:gcc/g++是c/c++使用最广泛的编译器,也是linux默认自带的编译套件,但在vscode上,也可通过微软官方提供的C/C++插件很便捷进行c/c++代码编译调试,但是该插件的自动补全和代码提示等功能很差,经常给不出合理的候选项。另外一套C/C++代码编译套件是基于LLVM的clang/clang++编译器、ll......
  • vue 各种东西的顺序
    props  —》beforeCreate —》methods—》data—》computed—》watch(immediate)—》created beforeCreate会在实例初始化完成、props解析之后、data() 和 computed 等选项处理之前立即调用。 created当这个钩子被调用时,以下内容已经设置完成:响应式数据data、......
  • gin embed打包静态资源文件
    项目目录├──asset//静态资源文件│├──bootstrap.min.css│├──bootstrap.min.js│└──jquery.js├──go.mod├──go.sum├──html//html模版文件│└──index.html└──main.gopackagemainimport("embed""html/templ......
  • -lpthread 和 pthread 以及 链接库的顺序
    写cmake文件时,编译一直无法正确识别欲调用的库函数,明明-lmysqlclient已经加上了。原本内容:(至今仍未解决,恳请各位点拨一下)cmake_minimum_required(VERSION3.0)project(HLWebServer)#设置C++标准为C++11set(CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS}-pthread-lmysqlclient......
  • 什么是静态代理IP?静态代理IP怎么设置?
    随着互联网的快速发展,越来越多的人需要使用网络来工作和学习。但在使用网络的过程中,有时会遇到一些问题,如网络连接不稳定、访问速度慢等。这些问题会影响我们的工作效率和学习效果,因此我们需要采取一些措施来解决它们。其中,使用代理IP是一种比较常见的解决方法。代理IP指的是通过使......
  • Java拾贝第五天——静态和代码块
    Java拾贝不建议作为0基础学习,都是本人想到什么写什么在Java中主要存在4块内存区域。栈内存空间:保存所有变量(更准确的说是保存了指向堆内存空间的地址)堆内存空间:保存每个对象的具体属性内容全局数据区:保存static类型的属性全局代码区:保存所有方法定义static关键字一个类实......
  • SQL执行顺序,优化的禁止项,建议项
    SQL执行顺序,优化的禁止项建议项SQL执行顺序如下:1.FROM,(-includingJOIN)2.WHERE3.GROUPBY4.HAVING5.WINDOWfunctions6.SELECT7.DISTINCT8.UNION9.ORDERBY10.LIMITandOFFSET·语句性能应注意两个方面:1)数据流的流向;2)orderbylimit场景。从执行顺序......