靜態分配空間
#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); //顯示值 }