1、
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//型別重命名
typedef struct Vector
{
int *data;
int size, length;
}Vector;
//初始化1個存盤n個元素的順序表
Vector* init(int n)
{
//申請一個順序表的空間
Vector* vec = (Vector*)malloc(sizeof(Vector));
//申請順序表中連續存盤區的存盤空間
vec->data = https://www.cnblogs.com/HanaKoo/p/(int*)malloc(sizeof(int) * n);
vec->size = n;
vec->length = 0;
return vec;
}
//順序表的插入操作(順序表,插入位置,插入值)
int insert(Vector* vec,int ind,int val)
{
//排除例外
if (vec == NULL)return 0;
if (vec->length == vec->size)return 0;
if (ind < 0 || ind > vec->length)return 0;
//將插入位置后方資料后移一位
for (int i = vec->length; i > ind; i--)
{
vec->data[i] = vec->data[i - 1];
}
vec->data[ind] = val;
vec->length += 1;
return 1;
}
//順序表的洗掉操作(順序表,位置)
int erase(Vector* vec, int ind)
{
//排除例外
if (vec == NULL)return 0;
if (vec->length == vec->size)return 0;
if (ind < 0 || ind >= vec->length)return 0;
//將后方位置元素向前移動一位
for (int i = ind + 1; i < vec->length; i++)
{
vec->data[i - 1] = vec->data[i];
}
vec->length -= 1;
return 1;
}
//輸出順序表
void output(Vector* vec)
{
printf("Vector(%d) = [", vec->length);
for (int i = 0; i < vec->length; i++)
{
if (i != 0)printf(", ");
printf("%d", vec->data[i]);
}
printf("]\n");
return;
}
//順序表的銷毀操作
void clear(Vector* vec)
{
if (vec == NULL)return;
//先順序表銷毀資料區
free(vec->data);
//再順序表銷毀本身空間
free(vec);
return;
}
//主函式
int main()
{
//傳入當前時間作為亂數種子
srand(time(0));
//隨機操作20組數
#define MAX_OP 20
Vector* vec = init(MAX_OP);
int op, ind, val;
for (int i = 0; i < MAX_OP; i++)
{
op = rand() % 2;//得到的 op 為0或1
ind = rand() % (vec->length + 1);//亂數索引
val = rand() % 100;//0-100之內隨機生成一個值
//判斷操作功能 0:插入、1:洗掉
switch (op)
{
case 0:
{
printf("insert %d at %d to vector = %d\n",
val, ind, insert(vec, ind, val));
} break;
case 1:
{
printf("erase item at %d from vector = %d\n",
ind, erase(vec, ind));
} break;
}
output(vec);
}
return 0;
}
2、上述代碼只能存盤最大為20個空間的資料,故一下代碼進行升級可以擴容操作
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//型別重命名
typedef struct Vector
{
int *data;
int size, length;
}Vector;
//初始化1個存盤n個元素的順序表
Vector* init(int n)
{
//申請一個順序表的空間
Vector* vec = (Vector*)malloc(sizeof(Vector));
//申請順序表中連續存盤區的存盤空間
vec->data = https://www.cnblogs.com/HanaKoo/p/(int*)malloc(sizeof(int) * n);
vec->size = n;
vec->length = 0;
return vec;
}
//對順序表擴容操作
int expand(Vector* vec)
{
int new_size = vec->size * 2;
int* p = (int*)realloc(vec->data, sizeof(int) * new_size);//重新分配
if (p == NULL) return 0;
vec->size = new_size;
vec->data = p;
return 1;
}
//順序表的插入操作(順序表,插入位置,插入值)
int insert(Vector* vec,int ind,int val)
{
//排除例外
if (vec == NULL)return 0;
if (vec->size == vec->length)
{
if (!expand(vec))return;//分配空間失敗則return
printf("expand vector size to %d success\n", vec->size);
}
if (ind < 0 || ind > vec->length)return 0;
//將插入位置后方資料后移一位
for (int i = vec->length; i > ind; i--)
{
vec->data[i] = vec->data[i - 1];
}
vec->data[ind] = val;
vec->length += 1;
return 1;
}
//順序表的洗掉操作(順序表,位置)
int erase(Vector* vec, int ind)
{
//排除例外
if (vec == NULL)return 0;
if (vec->length == vec->size)return 0;
if (ind < 0 || ind >= vec->length)return 0;
//將后方位置元素向前移動一位
for (int i = ind + 1; i < vec->length; i++)
{
vec->data[i - 1] = vec->data[i];
}
vec->length -= 1;
return 1;
}
//輸出順序表
void output(Vector* vec)
{
printf("Vector(%d) = [", vec->length);
for (int i = 0; i < vec->length; i++)
{
if (i != 0)printf(", ");
printf("%d", vec->data[i]);
}
printf("]\n");
return;
}
//順序表的銷毀操作
void clear(Vector* vec)
{
if (vec == NULL)return;
//先順序表銷毀資料區
free(vec->data);
//再順序表銷毀本身空間
free(vec);
return;
}
//主函式
int main()
{
//傳入當前時間作為亂數種子
srand(time(0));
//隨機操作20組數
#define MAX_OP 20
Vector* vec = init(1);
int op, ind, val;
for (int i = 0; i < MAX_OP; i++)
{
op = rand() % 2;//得到的 op 為0或1
ind = rand() % (vec->length + 1);//亂數索引
val = rand() % 100;//0-100之內隨機生成一個值
//判斷操作功能 0:插入、1:洗掉
switch (op)
{
case 0:
{
printf("insert %d at %d to vector = %d\n",
val, ind, insert(vec, ind, val));
} break;
case 1:
{
printf("erase item at %d from vector = %d\n",
ind, erase(vec, ind));
} break;
}
output(vec);
printf("\n");
}
return 0;
}
自此完成
Love for Ever Day轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/452008.html
標籤:其他
上一篇:面試連環炮系列(二十七):如何保證快取與資料庫的資料一致性
下一篇:紅黑樹-添加
