資料結構之線性表
阿新 • • 發佈:2022-04-01
記錄資料結構之線性表的程式碼實現
順序表的定義
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;
}