顺序表的创建与使用
这里还定义了一个数据类型的宏,TYPE。
首先需要设计数据结构,这里设计了两个成员:数组首地址和元素个数。
然后是进行各种业务功能的分函数:创建顺序表、销毁顺序表、访问顺序表中指定下标的元素、在顺序表中查找指定元素、对顺序表排序、遍历打印顺序表、删除顺序表中指定下标的元素、在顺序表中指定下标插入元素等。
具体业务实现如下:
创建:malloc先后创建两个空间
销毁:free先后销毁两个空间
访问:判断下标合法后即可返回存储的元素
查找:循环判断表中的元素是否相等,找到后返回下标,若查找不到则返回-1
排序:对元素进行排序
遍历:循环打印
删除:判断下标合法后将index后面的元素向前移,覆盖掉原元素
插入:判断下标合法后将index空出,循环从后往前将元素后移,跳出循环后再给index位赋值
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define TYPE int
// 设计数据结构
typedef struct Array
{
TYPE* base; // 数组首地址
size_t size; // 元素的个数
}Array;
// 创建
Array* create_array(size_t len)
{
Array* arr = malloc(sizeof(Array));
arr->base = malloc(sizeof(TYPE)*len);
arr->size = len;
return arr;
}
// 销毁
void destory_array(Array* arr)
{
free(arr->base);
free(arr);
}
// 访问
TYPE* access_array(Array* arr,int index)
{
if(index < 0 || index >= arr->size) return NULL;
return arr->base + index;
}
// 查找
int find_array(Array* arr,TYPE data)
{
for(int i=0; i<arr->size; i++)
{
if(data == arr->base[i])
return i;
}
return -1;
}
// 排序
void sort_array(Array* arr)
{
for(int i=0; i<arr->size-1; i++)
{
for(int j=i+1; j<arr->size; j++)
{
if(arr->base[i] > arr->base[j])
{
TYPE temp = arr->base[i];
arr->base[i] = arr->base[j];
arr->base[j] = temp;
}
}
}
}
// 遍历
void show_array(Array* arr)
{
for(int i=0; i<arr->size; i++)
{
printf("%d ",arr->base[i]);
}
printf("\n");
}
// 删除
bool delete_array(Array* arr,int index)
{
if(index < 0 || index >= arr->size) return false;
for(int i=index; i<arr->size-1; i++)
{
arr->base[i] = arr->base[i+1];
}
return true;
}
// 插入
bool insert_array(Array* arr,int index,TYPE data)
{
if(index < 0 || index >= arr->size) return false;
for(int i=arr->size-1; i>index; i--)
{
arr->base[i] = arr->base[i-1];
}
arr->base[index] = data;
return true;
}
int main()
{
Array* arr = create_array(20);
for(int i=0; i<100; i++)
{
TYPE* p = access_array(arr,i);
if(NULL != p)
*access_array(arr,i) = rand() % 100;
}
show_array(arr);//遍历显示顺序表
sort_array(arr);//顺序表排序
show_array(arr);
printf("find index = %d\n",find_array(arr,86));//查找
delete_array(arr,15);//删除
delete_array(arr,15);
printf("find index = %d\n",find_array(arr,86));
show_array(arr);
insert_array(arr,10,86);//指定位置下标插入元素
printf("find index = %d\n",find_array(arr,86));
show_array(arr);
destory_array(arr);
}
程序运行结果如下:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)