进入主题:
表结构之顺序表:
定义:
typedef struct Array
{
TYPE* ptr; 存储元素的内存首地址
size_t cal; // 表的容量
size_t cnt; // 元素的数量
}Array;
// 创建
Array* create_array(size_t size)
{
// 分配表结构内存
Array* arr = malloc(sizeof(Array));
// 分配存储元素的内存
arr->ptr = malloc(sizeof(TYPE)*size);
// 记录容量
arr->cal = size;
// 初始化元素数量
arr->cnt = 0;
return arr;
}
// 销毁
void destory_array(Array* arr)
{
free(arr->ptr);
free(arr);
}
// 清空
void clean_array(Array* arr)
{
arr->cnt = 0;
}
// 插入
bool insert_array(Array* arr,int index,TYPE val)
{
// 判断表是否已满
if(arr->cnt >= arr->cal) return false;
// 判断下标是否能让表中的元素保持连续
if(index > arr->cnt) return false;
// 内存拷贝,向后移动数据
/*for(int i=arr->cnt; i>index; i--)
{
arr->ptr[i] = arr->ptr[i-1];
}*/
memcpy(arr->ptr+index+1,arr->ptr+index,(arr->cnt-index)*sizeof(TYPE));//运用函数
arr->ptr[index] = val;
arr->cnt++;
return true;
}
// 删除
bool delete_array(Array* arr,int index)
{
if(index >= arr->cnt) return false;
memcpy(arr->ptr+index,arr->ptr+index+1,(arr->cnt-index-1)*sizeof(TYPE));
arr->cnt--;
return true;
}
// 访问
bool access_array(Array* arr,int index,TYPE* val)
{
if(index >= arr->cnt) return false;
*val = arr->ptr[index];
return true;
}
// 修改
bool modify_array(Array* arr,int index,TYPE val)
{
if(index >= arr->cnt) return false;
arr->ptr[index] = val;
return true;
}
// 查询
int query_array(Array* arr,TYPE key)
{
for(int i=0; i<arr->cnt; i++)
{
if(arr->ptr[i] == key) return i;
}
// 创建
Array* create_array(size_t size)
{
// 分配表结构内存
Array* arr = malloc(sizeof(Array));
// 分配存储元素的内存
arr->ptr = malloc(sizeof(TYPE)*size);
// 记录容量
arr->cal = size;
// 初始化元素数量
arr->cnt = 0;
return arr;
}
// 销毁
void destory_array(Array* arr)
{
free(arr->ptr);
free(arr);
}
// 清空
void clean_array(Array* arr)
{
arr->cnt = 0;
}
// 插入
bool insert_array(Array* arr,int index,TYPE val)
{
// 判断表是否已满
if(arr->cnt >= arr->cal) return false;
// 判断下标是否能让表中的元素保持连续
if(index > arr->cnt) return false;
// 内存拷贝,向后移动数据
/*for(int i=arr->cnt; i>index; i--)
{
arr->ptr[i] = arr->ptr[i-1];
} */
memcpy(arr->ptr+index+1,arr->ptr+index,(arr->cnt-index)*sizeof(TYPE));
arr->ptr[index] = val;
arr->cnt++;
return true;
}
// 删除
bool delete_array(Array* arr,int index)
{
if(index >= arr->cnt) return false;
memcpy(arr->ptr+index,arr->ptr+index+1,(arr->cnt-index-1)*sizeof(TYPE));
arr->cnt--;
return true;
}
// 访问
bool access_array(Array* arr,int index,TYPE* val)
{
if(index >= arr->cnt) return false;
*val = arr->ptr[index];
return true;
}
// 修改
bool modify_array(Array* arr,int index,TYPE val)
{
if(index >= arr->cnt) return false;
arr->ptr[index] = val;
return true;
}
// 查询
int query_array(Array* arr,TYPE key)
{
for(int i=0; i<arr->cnt; i++)
{
if(arr->ptr[i] == key) return i;
}
return -1;// 创建
Array* create_array(size_t size)
{
// 分配表结构内存
Array* arr = malloc(sizeof(Array));
// 分配存储元素的内存
arr->ptr = malloc(sizeof(TYPE)*size);
// 记录容量
arr->cal = size;
// 初始化元素数量
arr->cnt = 0;
return arr;
}
// 销毁
void destory_array(Array* arr)
{
free(arr->ptr);
free(arr);
}
// 清空
void clean_array(Array* arr)
{
arr->cnt = 0;
}
// 插入
bool insert_array(Array* arr,int index,TYPE val)
{
// 判断表是否已满
if(arr->cnt >= arr->cal) return false;
// 判断下标是否能让表中的元素保持连续
if(index > arr->cnt) return false;
// 内存拷贝,向后移动数据
/*for(int i=arr->cnt; i>index; i--)
{
arr->ptr[i] = arr->ptr[i-1];
}*/
memcpy(arr->ptr+index+1,arr->ptr+index,(arr->cnt-index)*sizeof(TYPE));
arr->ptr[index] = val;
arr->cnt++;
return true;
}
// 删除
bool delete_array(Array* arr,int index)
{
if(index >= arr->cnt) return false;
memcpy(arr->ptr+index,arr->ptr+index+1,(arr->cnt-index-1)*sizeof(TYPE));
arr->cnt--;
return true;
}
// 访问
bool access_array(Array* arr,int index,TYPE* val)
{
if(index >= arr->cnt) return false;
*val = arr->ptr[index];
return true;
}
// 修改
bool modify_array(Array* arr,int index,TYPE val)
{
if(index >= arr->cnt) return false;
arr->ptr[index] = val;
return true;
}
// 查询
int query_array(Array* arr,TYPE key)
{
for(int i=0; i<arr->cnt; i++)
{
if(arr->ptr[i] == key) return i;
}
return -1;
}
// 排序
void sort_array(Array* arr);
// 遍历
void show_array(Array* arr)
{
for(int i=0; i<arr->cnt; i++)
{
printf("%d ",arr->ptr[i]);
}
printf("\n");
}
}
// 排序
void sort_array(Array* arr);
// 遍历
void show_array(Array* arr)
{
for(int i=0; i<arr->cnt; i++)
{
printf("%d ",arr->ptr[i]);
}
printf("\n");
}
}
// 排序
void sort_array(Array* arr);
// 遍历
void show_array(Array* arr)
{
for(int i=0; i<arr->cnt; i++)
{
printf("%d ",arr->ptr[i]);
}
printf("\n");
}// 创建
Array* create_array(size_t size)
{
// 分配表结构内存
Array* arr = malloc(sizeof(Array));
// 分配存储元素的内存
arr->ptr = malloc(sizeof(TYPE)*size);
// 记录容量
arr->cal = size;
// 初始化元素数量
arr->cnt = 0;
return arr;
}
// 销毁
void destory_array(Array* arr)
{
free(arr->ptr);
free(arr);
}
// 清空
void clean_array(Array* arr)
{
arr->cnt = 0;
}
// 插入
bool insert_array(Array* arr,int index,TYPE val)
{
// 判断表是否已满
if(arr->cnt >= arr->cal) return false;
// 判断下标是否能让表中的元素保持连续
if(index > arr->cnt) return false;
// 内存拷贝,向后移动数据
/*for(int i=arr->cnt; i>index; i--)
{
arr->ptr[i] = arr->ptr[i-1];
}*/
memcpy(arr->ptr+index+1,arr->ptr+index,(arr->cnt-index)*sizeof(TYPE));
arr->ptr[index] = val;
arr->cnt++;
return true;
}
// 删除
bool delete_array(Array* arr,int index)
{
if(index >= arr->cnt) return false;
memcpy(arr->ptr+index,arr->ptr+index+1,(arr->cnt-index-1)*sizeof(TYPE));
arr->cnt--;
return true;
}
// 访问
bool access_array(Array* arr,int index,TYPE* val)
{
if(index >= arr->cnt) return false;
*val = arr->ptr[index];
return true;
}
// 修改
bool modify_array(Array* arr,int index,TYPE val)
{
if(index >= arr->cnt) return false;
arr->ptr[index] = val;
return true;
}
// 查询
int query_array(Array* arr,TYPE key)
{
for(int i=0; i<arr->cnt; i++)
{
if(arr->ptr[i] == key) return i;
}
return -1;
}
// 排序
void sort_array(Array* arr);
// 遍历
void show_array(Array* arr)
{
for(int i=0; i<arr->cnt; i++)
{
printf("%d ",arr->ptr[i]);
}
printf("\n");
}