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

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

时间:2023-08-26 09:03:14浏览次数:50  
标签:顺序 return 静态 MaxSize 动态分配 int length 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,data
From: https://www.cnblogs.com/zyj3955/p/17658310.html

相关文章

  • chat聊天(对话)静态页
    chat聊天(对话)静态页从以前做的项目里扒下来的。。可能以后会用到。。先单独记下来。。扒的layim的界面  下载地址:链接:https://caiyun.139.com/m/i?0V5CrwUqd7n3H提取码:UPWc <!DOCTYPEhtml><html><head><title>聊天页面</title><metacharset="utf-8"><met......
  • cmake生成动静态库文件及目录
    CMakeLists.txtcmake_minimum_required(VERSION3.15)project(test)#set(SRCadd.cpp;div.cpp;mult.cpp;main.cpp;sub.cpp)#${PROJECT_SOURCE_DIR}指定的就是cmakelists所在的路径aux_source_directory(搜索路径)方式一#aux_source_directory(${PROJECT_SOURCE_DIR}/sr......
  • C++静态成员(static)
    静态成员(static)什么是静态成员:被static修饰的成员/成员函数就叫静态成员,不管有多少对象,静态成员只有一份存于公共内存中。设计静态数据成员目的是信息共享和信息交流普通成员特点:成员变量:每个类对象中都有一份属于自己的成员变量,相互独立、没有关联。普通成员与对象绑定,随......
  • C++静态成员和单例模式
    一、静态成员Ⅰ.什么是静态成员:被static修饰的成员变量和成员函数就叫静态成员Ⅱ.普通成员的特点:成员变量:每个类对象中都有一份属于自己的成员变量,相互之间没有关联、独立的成员函数:隐藏着一个this指针,接收调用者的地址用于区分调用者Ⅲ.静态成员的特点:静态成员变......
  • 基于静态编译构建微服务应用
    作者:饶子昊(铖朴)Java的局限性传统的一个Java应用从代码编写到启动运行大致可以分为如下步骤:首先,编写.java源代码程序。然后,借助javac工具将.java文件翻译为.class的字节码,字节码是Java中非常重要的内容之一,正是因为它的出现,Java才实现对底层环境的屏蔽,达到Writ......
  • 流程控制Scanner进阶和顺序结构
    Scanner进阶用简单地判断语句输入整数和小数,并打印出正确结果和错误结果packageScanner;importjava.util.Scanner;publicclassDemo03{publicstaticvoidmain(String[]args){//获取键盘数据Scannerscr=newScanner(System.in);i......
  • 静态Web服务器-以⾯向对象的模式开发
    步骤1.把提供服务的Web服务器抽象成⼀个类(HTTPWebServer)2.提供Web服务器的初始化⽅法,在初始化⽅法⾥⾯创建socket对象3.提供⼀个启动Web服务器的⽅法,让Web服务器处理客户端请求操作。 示例1importsocket2importthreading34#获取用户请求资源的路径5......
  • 静态方法引用
    静态方法引用格式类名::静态方法成员方法对象::成员方法本类this::方法父类super::方法名引用构造方法格式类名::new 使用类名引用成员方法String::substring方法引用规则,1需要有函数接口2方法必须存在3被引用形参和抽象方法的第二个形参到最后一个形参必须保持......
  • 1.C++入门以及简单顺序结构题目
    1.C++入门以及简单顺序结构题目1.交换值【题目描述】输入两个正整数a和b,试交换a、b的值(使a的值等于b,b的值等于a)。【输入】输入两个正整数a和b。【输出】输出a与b交换值后的结果。【输入样例】23【输出样例】32inta=2,b=3,c;cin>>a>>b;c=a;a=b;b=c;cout<<a......
  • 1.C++入门以及简单顺序结构题目
    1.C++入门以及简单顺序结构题目™1.交换值【题目描述】输入两个正整数a和b,试交换a、b的值(使a的值等于b,b的值等于a)。【输入】输入两个正整数a和b。【输出】输出a与b交换值后的结果。【输入样例】23【输出样例】32inta,b;cin>>a>>b;printf("%d%d",b,a);2.整......