以下内容知识一个记录
学习 数据结构中线性结构----顺序存储的数组
用c语言实现
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
/*
time:2023年5月28日11:54:10
目的:实现线性结构 数组的创建过程
实现:代码如下
*/
//创建类型
struct Array
{
int* pBase;//存放数组的开始位置的指针
int len;//数组的长度
int cot;//数组的有效长度
};
//存放函数的声明
//初始化数组
void init_arr(struct Array * pArr,int length);
//判断是否非空
bool is_empty(struct Array* pArr);
//显示数组的数据
void show_arr(struct Array* pArr);
//数组是否为满了
bool is_full(struct Array* pArr);
//数组的末尾添加操作
bool append(struct Array* pArr, int value);
//数组的某个位置插入
//pos 位置 从1开始 value是插入的值
bool insert(struct Array* pArr, int pos ,int value);
//数组的删除
bool delete_arr(struct Array* pArr, int pos,int * delvalue);
//获取值
int get(struct Array* pArr,int index);
//数组 反向
void reverse(struct Array* pArr);
//数组排序 顺序 从小到大
void sort(struct Array* pArr);
int main() {
//实例化结构体
struct Array pArr;
//初始化操作
init_arr(&pArr,6);
//打印展示数组
show_arr(&pArr);
//插入
append(&pArr, 1);
append(&pArr, 2);
append(&pArr, 3);
append(&pArr, 4);
append(&pArr, 5);
show_arr(&pArr);
//插入
insert(&pArr, 2, 99);
show_arr(&pArr);
//删除
int del_value;
delete_arr(&pArr, 3, &del_value);
show_arr(&pArr);
printf("删除的值%d\n", del_value);
int val = get(&pArr, 2);
printf("get的值%d\n", val);
printf("数组实现反向排序\n");
reverse(&pArr);
show_arr(&pArr);
//排序
printf("排序之后\n");
sort(&pArr);
show_arr(&pArr);
return 0;
}
//数组实现------初始化数组
void init_arr(struct Array* pArr,int length) {
//申请地址
pArr->pBase = (int*)malloc(sizeof(int) * length);
//判断是否申请成功
if (NULL == pArr->pBase) {
printf("空间不足申请失败");
exit(-1);
}
else{
//初始化长度
pArr->len = length;
//初始化有效值
pArr->cot = 0;
}
//结束
return;
}
//数组实现------判断是否非空
bool is_empty(struct Array* pArr) {
if (pArr->cot == 0) {
return true;
}
else{
return false;
}
}
//数组实现------打印展示数组
void show_arr(struct Array* pArr) {
if (is_empty(pArr)){
printf("数组为空!\n");
}
else {
for (int i = 0; i < pArr->cot; i++)
{
printf("%d ", pArr->pBase[i]);
}
printf("\n");
}
}
//数组实现------是否为满
bool is_full(struct Array* pArr) {
if (pArr->cot == pArr->len)
{
return true;
}
else {
return false;
}
}
//数组的实现-------末尾插入数据
bool append(struct Array* pArr,int value) {
//判断是否为满 满了就不能插入
if (is_full(pArr))
{
return false;
}
//存有空间 末尾加入
//1|2|3| | | | 3后面加入 cot++
pArr->pBase[pArr->cot] = value;
(pArr->cot)++;
return true;
}
//数组实现-----在某个位置插入数据
bool insert(struct Array* pArr, int pos, int value) {
//数组满的话无法插入
if (is_full(pArr))
{
return false;
}
//如果输入位置有问题
if (pos<1 || pos>pArr->cot)
{
return false; //输入的位置不合理
}
//进行 插入后移
for (int i = pArr->cot; i >= pos; i--){
//移动位置
pArr->pBase[i] = pArr->pBase[i - 1];
}
//把插入值放到位置上面
pArr->pBase[pos - 1] = value;
(pArr->cot)++;
return true;
}
bool delete_arr(struct Array* pArr, int pos,int * delvalue) {
//输入位置检测
if (pos<1 || pos>pArr->cot)
{
return false; //输入的位置不合理
}
//获取删除的值
*delvalue = pArr->pBase[pos - 1];
//数值前移
for (int i = pos; i < pArr->cot; i++) {
//移动位置 往前移动
pArr->pBase[i-1] = pArr->pBase[i];
}
//有效值-1
(pArr->cot)--;
return true;
}
//数组实现---根据下标找值
int get(struct Array* pArr, int index) {
//判断下标是否越界
if (index<0 || index>pArr->cot)
{
return -1;
}
return pArr->pBase[index];
}
//数组实现-----反向
void reverse(struct Array* pArr){
int i = 0;
int j = pArr->cot-1;
while ( i < j)
{
//交换值
int t = pArr->pBase[i];
pArr->pBase[i]= pArr->pBase[j];
pArr->pBase[j] = t;
i++;
j--;
}
}
//数组实现------排序
void sort(struct Array* pArr) {
//冒泡
for (int i = 0; i < pArr->cot; i++)
{
for (int j = i+1; j < pArr->cot; j++)
{
if (pArr->pBase[i] > pArr->pBase[j]) {
int t = pArr->pBase[i];
pArr->pBase[i] = pArr->pBase[j];
pArr->pBase[j] = t;
}
}
}
}
运行结果如下