静态分配空间
#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); //显示值 }