数据结构入门:顺序表实现动态分配
本文最后更新于48 天前,其中的信息可能已经过时,如有错误请发送邮件到3206482802@qq.com
#include<stdio.h>//标准输入输出库,包含printf、scanf等函数
#include<stdbool.h>//标准布尔类型库,包含true、false等常量,bool类型
#include<stdlib.h>//标准库,包含malloc、free等函数

#define MAXSIZE 10
typedef struct{//顺序表的定义
    int *data;//动态分配数组的指针
    int Maxsize;//顺序表的最大容量
    int length;//顺序表的当前长度
}sqlist;

void Initlist(sqlist *L){//初始化顺序表
    L->data=(int*)malloc(MAXSIZE*sizeof(int));//动态分配数组空间
    L->Maxsize=MAXSIZE;//初始化最大容量
    L->length=0;//初始化长度为0
}

void IncreaseSize(sqlist *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+=len;//更新最大容量
    free(p);//释放原数组空间

}
bool Insertlist(sqlist *L,int i,int e){//插入元素
    if(i<1||i>L->length+1){//判断插入位置是否合法
        return false;
    }
    if(L->length>=L->Maxsize){//如果当前长度大于等于最大容量,则增加容量
        IncreaseSize(L,5);//增加5个容量
    }
    for(int j=L->length;j>=i;j--){//将元素向后移动,腾出下表i-1位置给新元素
        L->data[j]=L->data[j-1];//将元素向后移动
    }
    L->data[i-1]=e;//插入元素
    L->length++;//更新长度
    return true;
}
bool deletelist(sqlist *L,int i,int *e){//删除元素
    if(i<1||i>L->length){//判断删除位置是否合法
        return false;
    }
    *e=L->data[i-1];//保存删除元素
    for(int j=i;j<L->length;j++){
        L->data[j-1]=L->data[j];//将元素向前移动
    }
    L->length--;//更新长度
    return true;
}
void Printlist(sqlist L){//打印顺序表
    for(int i=0;i<L.length;i++){//遍历顺序表,打印每个元素
        printf("sqlist L[%d]=%d\n",i,L.data[i]);
    }
}
void textprintlist(sqlist L){
    for(int i=0;i<L.Maxsize;i++){//遍历顺序表,打印每个元素
        printf("sqlist L[%d]=%d\n",i,L.data[i]);
    }
}


int main(){
    sqlist L;
    Initlist(&L);//初始化顺序表
    printf("insertlist before:length=%d,Maxsize=%d\n",L.length,L.Maxsize);
    textprintlist(L);
    Insertlist(&L,1,1);//插入元素
    Insertlist(&L,2,2);
    Insertlist(&L,3,3);
    Insertlist(&L,4,4);
    Insertlist(&L,5,5);
    Insertlist(&L,6,6);
    Insertlist(&L,7,7);
    Insertlist(&L,8,8);
    Insertlist(&L,9,9);
    Insertlist(&L,10,10);
    printf("\n");
    printf("insertlist after1:length=%d,Maxsize=%d\n",L.length,L.Maxsize);
    Printlist(L);
    Insertlist(&L,11,11);
    Insertlist(&L,12,12);
    Insertlist(&L,13,13);
    Insertlist(&L,14,14);
    Insertlist(&L,15,15);
    Insertlist(&L,16,16);
    Insertlist(&L,17,17);
    Insertlist(&L,18,18);
    Insertlist(&L,19,19);
    Insertlist(&L,20,20);
    printf("\n");
    printf("increase after2:length=%d,Maxsize=%d\n",L.length,L.Maxsize);
    Printlist(L);
    int a=0;
    Insertlist(&L,1,a);
    printf("\n");
    printf("insertlist in the middle of the list after2:length=%d,Maxsize=%d,inserted element=%d\n",L.length,L.Maxsize,a);
    Printlist(L);
    int e=1;
    deletelist(&L,1,&e);
    printf("\n");
    printf("deletelist after:length=%d,Maxsize=%d,deleted element=%d\n",L.length,L.Maxsize,e);
    Printlist(L);
}

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇