1. 程式人生 > 其它 >【資料結構】線性表(WD)

【資料結構】線性表(WD)

目錄

順序表的實現——靜態分配

#include <bits/stdc++.h>

#define MaxSize 10 //定義最大長度

using namespace std;

typedef struct
{
    int data[MaxSize]; //用靜態陣列存放資料元素
    int length;        //順序表的當前長度
} SqList;              //順序表的當前定義

//初始化順序表
void InitList(SqList &L)
{
    for (int i = 0; i < MaxSize; i++)
    {
        L.data[i] = 0; //將所有資料元素設定為預設初始值
    }
    L.length = 0; //順序表初始長度為0
}

int main()
{
    SqList L; //宣告一個順序表

    InitList(L); //初始化順序表

    for (int i = 0; i < MaxSize; i++)
    {
        printf("data[%d]=%d\n", i, L.data[i]);
    }

    return 0;
}

output
data[0]=0
data[1]=0
data[2]=0
data[3]=0
data[4]=0
data[5]=0
data[6]=0
data[7]=0
data[8]=0
data[9]=0

順序表的實現——動態分配

#include <bits/stdc++.h>

#define InitSize 10 //預設的最大長度

using namespace std;

typedef struct
{
    int *data;   //指示動態分配陣列的指標
    int MaxSize; //順序表的最大容量
    int length;  //順序表的當前長度
} SeqList;       //順序表的當前定義

//初始化順序表
void InitList(SeqList &L)
{
    //用malloc函式申請一片連續的儲存空間
    L.data = (int *)malloc(InitSize * sizeof(int));
    L.MaxSize = InitSize;
    L.length = 0;
}

//增加動態陣列的長度
void IncreaseSize(SeqList &L, int len)
{
    int *p = L.data;
    L.data = (int *)malloc((L.MaxSize + len) * sizeof(int));
    // for (int i = 0; i < L.MaxSize; i++)
    // {
    //     L.data[i] = p[i]; //將資料複製到新區域
    // }
    L.MaxSize = L.MaxSize + len; //更新順序表最大長度
    free(p);                     //釋放原來的記憶體空間
}

int main()
{
    SeqList L; //宣告一個順序表

    InitList(L); //初始化順序表

    cout << L.MaxSize << endl;

    IncreaseSize(L, 5);

    cout << L.MaxSize << endl;

    return 0;
}

output
10
15