数据结构----使用c语言 实现数组(顺序表)的源码

以下内容知识一个记录
学习 数据结构中线性结构----顺序存储的数组
用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;
			}
		}

	}
}



运行结果如下
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值