1. 程式人生 > 其它 >資料結構之線性表

資料結構之線性表

記錄資料結構之線性表的程式碼實現

順序表的定義

typedef struct Vector {
    int* data;
    int size, length;
}Vector;

順序表的初始化

Vector* init(int n)
{
    Vector* v = (Vector*)malloc(sizeof(Vector));
    v->data = (int*)malloc(sizeof(int) * n);
    v->size = n;
    v->length = 0;
    return v;
}

順序表的清空

void clear(Vector* v)
{
    if (v == NULL) return;
    free(v->data);
    free(v);
    return;
}

順序表的擴容操作

int expand(Vector* v)
{
    int extr_size = v->size;
    int* p=NULL;
    while (extr_size)
    {
        p = (int*)realloc(v->data, sizeof(int) * (v->size + extr_size));
        if (p != NULL) break;
        extr_size >> 1;
    }
    if (p == NULL) return 0;
    v->data = p;
    v->size += extr_size;
    return 1;
}

順序表的插入

int insert(Vector* v, int ind, int val)
{
    if (v == NULL) return 0;
    if (v->length == v->size)
    {
        if (!expand(v)) return 0;
        printf("success to expand! the size= %d\n", v->size);
    }
    if (ind<0 || ind>v->length) return 0;
    for (int i = v->length; i > ind; i--) {
        v->data[i] = v->data[i - 1];
    }

    v->data[ind] = val;
    v->length += 1;
    return 1;
}

順序表的刪除

int erase(Vector* v, int ind)
{
    if (v == NULL) return 0;
    if (ind < 0 || ind >= v->length) return 0;
    for (int i = ind + 1; i < v->length; i++)
    {
        v->data[i - 1] = v->data[i];
    }
    v->length -= 1;
    return 1;
}

順序表的列印

void output(Vector* v)
{
    if (v == NULL) return;
    for (int i = 0; i < v->length; i++)
    {
        i&& printf(" ");
        printf("%d", v->data[i]);
    }
    return;
}