顺序表的初始化


静态分配空间

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
typedef struct{//结构体
    int data[MaxSize];//定义一个数组
    int length;//数据长度
}seqList;
void chushi(seqList &L)//初始化
{
    int i = 0;
    for(i = 0;i < L;i ++){
        L.data[i] = 0;
    }
}
void show(seqList L)//打印
{
    int i = 0;
    for(i = 0;i < MaxSize;i ++){
        printf("%d\n",L.data[i]);
    } 
}
int main()
{
    seqList L;
    chushi(L);
//    show(L);
    return 0;
    
 } 

不足:数组空间一旦创建就无法发更改,所以一旦空间占满,再加入新的数据会产生溢出

那我们可以用动态分配空间

malloc()函数动态分配空间,返回的是一个指针,我们需要根据我们指针的数据类型进行强转

 

 

#include <stdio.h>
#include <stdlib.h>
#define InitSize 100
typedef struct{
    int *data; 
    int Maxsize;//记录空间的大小
    int length;//记录空间里元素的个数 
}SeqList;
int chu(SeqList &L){
    L.data = (int *)malloc(sizeof(int) * InitSize);
    if(!L.data){
        return 0;
    }
    L.Maxsize = InitSize;
    L.length = 0; 
    return 1;
}
int add(SeqList &L,int e,int i){
    if(i > L.length + 1 || i < 1){
        printf("位置非法\n");
        return 0; 
    }
    if(L.length >= L.Maxsize){
        int *temp = (int *)realloc(L.data,sizeof(int) * (L.Maxsize + 20));
        if(!temp){
            printf("空间不足,添加fail\n");
            return 0;
        }
        L.Maxsize += 20;
        L.data = temp;
        free (temp);
    }
    int *p,*q;
    q = &L.data[i - 1];
    for(p = &L.data[L.length - 1];p >= q;p --){
        *(p + 1) = *p;
    }
    *q = e;
    L.length ++;
    return 1;
    
}
void show(SeqList L){
    int i = 0;
    for(i = 0;i < L.length;i ++){
        printf("%d\t",L.data[i]);
    }
}
int main(){
    SeqList L;
    int temp,e;
    int choice;
    if(chu(L)){
        printf("初始化成功\n");
    }
    while(1){//添加元素
        printf("1,添加\n");
        printf("2,退出\n");
        printf("请输入你的选择:");
        scanf("%d",&choice);
        if(choice == 1){
                printf("请输入要插入的位置和待插入的数据\n");
                scanf("%d %d",&temp,&e);
                if(add(L,e,temp)){
                    printf("添加成功\n");
    }
        }else{
        break;
    }
        
    } 

    show(L); //显示值
    
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM