竖锯结垢第一训练

arrc.c功能实现

#include"arrc.h"
//创建一个数组
void arr_add(arr_list *first,int lenth)
{
	first->ptoadd=(int *)malloc(sizeof(int)*lenth);
	//创建一个动态内存并让ptoadd指向它
	if(NULL==first->ptoadd)
	//判断内存是否分配成功
	{
		printf("分配内存失败");
		return;
	}
	first->len=lenth;
	first->count=0;
	return;
}

void arr_write(arr_list *first)
//使用scanf手动输入数组的值
{
	int i=0;
	int a=0;
	printf("请输入数据:");
	for(i=0;i<first->len;i++)
	{
		scanf("%d",&a);
		first->ptoadd[i]=a;
		first->count++;
	}
	return;
}

void arr_search(arr_list *first)
//遍历数组内的元素
{
	int i=0;
	for(i=0;i<first->count;i++)
	{
		printf("%d ",first->ptoadd[i]);
	}
	return;
}

bool arr_insert(arr_list *first,int val)
//尾插法输入数组元素
{
	if(first->count==first->len)
	//判断计数器是否已满
	{
		printf("数组已满!\n");
		return false;
	}
	first->ptoadd[first->count]=val;
	first->count++;
	return true;
}

void insert_arr(arr_list *first,int pos,int val)
{
	//在数组指定位置插入元素
	//pos为第几个元素(按1到count来计算)或下标(按0到(count-1))
	//本次按照第几个元素来计算
	//val为要插入的值
	int i=0;
	if(first->count==first->len)
	//判断数组是否已满
	{
		printf("数组已满,无法插入!\n");
		return;
	}
	if(pos<1||pos>first->count+1)
	//若数组不满便对pos进行判断,元素个数不可为0(不可小于1)
	//数组为连续存储所以可插入有效位的后一位(即count+1)
	//若pos是按照数组下标来计算的话就不能超过第count位了
	{
		printf("插入位置有误!\n");
		return;
	}
	for(i=first->count;i>=pos;i--)
	//此处写法多种多样
	{
		first->ptoadd[i]=first->ptoadd[i-1];
	//一定要多思考、在吃透之前要多想!要多想!
	}
	first->ptoadd[pos-1]=val;
	first->count++;
	//插入之后计数器增加
	return;
}

void arr_delete(arr_list *first,int pos)
	//删除一个指定的pos(可以是元素位数也可以是下标)元素
{
	int j=0;
	int i=0;
	if(pos<1||pos>first->count)
	//此处pos按照个数来计算要删除的元素
	//先判断输入的pos是否满足要求
	{
		printf("所要删除的元素不存在!");
		return;
	}
	j=first->ptoadd[pos-1];
	//提示所删除的元素(这是图省事的写法,最好创造一个指针)
	printf("所删除的元素为%d\n",j);
	for(i=pos-1;i<first->count-1;i++)
	//pos-1将元素位数转换为了下标,count-1为最后一个元素的下标
	//count-2为减完元素之后最后一个下标的位置,所以不能超过
	{
	//写法多种多样,千万不要停止思考,要多想!
		first->ptoadd[i]=first->ptoadd[i+1];
	}
	first->count--;
	return;
}

void inversion(arr_list *first)
//将数组反演、倒置
{
	if(0==first->count)
	{
		printf("数组为空!");
		return;
	}
	int i=0;
	int j=first->count-1;
	int t=0;
	while(i<j)
	{
		t=first->ptoadd[i];
		first->ptoadd[i]=first->ptoadd[j];
		first->ptoadd[j]=t;
		i++;
		j--;
	}
		return;
}

void arr_sort(arr_list *first)
{
//排序
	int i,j,t;
	for(i=0;i<first->count-1;i++)
	{
		for(j=i+1;j<first->count;j++)
		{
			if(first->ptoadd[i]<first->ptoadd[j])
			{
				t=first->ptoadd[i];
				first->ptoadd[i]=first->ptoadd[j];
				first->ptoadd[j]=t;
			}
		}
	}
	return;
}

arrc.h头文件

#ifndef _arrc_h_
#define _arrc_h_
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct arr_list//ptoadd指针变量指向
//一个数组、len数组长度、count计数器
{
	int *ptoadd;
	int len;
	int count;
}arr_list;

void arr_add(arr_list *first,int len);
void arr_write(arr_list *first);
void arr_search(arr_list *first);
bool arr_insert(arr_list *first,int val);
void insert_arr(arr_list *first,int pos,int val);
void arr_delete(arr_list *first,int pos);
void inversion(arr_list *first);
void arr_sort(arr_list *first);
#endif

arr.c函数调运

#include"arrc.h"

int main(int argc, const char *argv[])
{
	arr_list first;
	arr_add(&first,8);
	//arr_write(&first);
	arr_insert(&first,10);
	arr_insert(&first,20);
	arr_insert(&first,30);
	arr_insert(&first,40);
	arr_insert(&first,50);
	arr_insert(&first,60);
	arr_insert(&first,70);
	insert_arr(&first,1,46);
	//insert_arr(&first,9,46);
	//arr_delete(&first,3);
	//inversion(&first);
	arr_sort(&first);
	arr_search(&first);
	return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值