順序表的初始化


靜態分配空間

#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