数组 Arr

#include<stdio.h>
#include<malloc.h> 
#include<stdlib.h>//包含了exit函数 
//定义了一个数据类型,该数据结构的名字叫做struct Arr,
// 该数据类型包含三个成员,分别为pBase,len,cnt  
struct Arr
{
	int * pBase;//存储的是数组第一个元素的地址
	int len;//数组所能容纳的最大元素的个数
	int cnt;//当前数组有效元素的个数 
 };
 
  void init_arr(struct Arr * pArr, int length);//初始化 
  bool append_arr(struct Arr * pArr, int val);//追加
  bool insert_arr(struct Arr * pArr, int pos, int val);//插入 //pos的值从1开始 
  bool delete_arr(struct Arr * pArr,int pos,int * pVal);//删除 
  int get();
  bool is_empty(struct Arr * pArr);//是否空 
  bool is_full(struct Arr * pArr);//是否满 
  void sort_arr(struct Arr * pArr);//排序 
  void show_arr(struct Arr * pArr);//显示 
  void inversion_arr(struct Arr * pArr);//倒置 
  
  int main(void)
  {
  	struct Arr arr;
  	int val;
  	
  	init_arr(&arr, 6);//初始化 
  	show_arr(&arr);
  	append_arr(&arr, 1);
  	append_arr(&arr, 210);
  	append_arr(&arr, -3);
  	append_arr(&arr, 6);
  	append_arr(&arr, 88);
  	append_arr(&arr, 11);
  	if ( delete_arr(&arr, 4, &val) )
  	{
  		printf("删除成功!\n");
  		printf("您删除的元素是:%d\n", val);
	  }
	  else
	  {
	  	printf("删除失败!\n");
	  }
  	
 /*   
    append_arr(&arr, 2);
  	append_arr(&arr, 3);
  	append_arr(&arr, 4);
  	append_arr(&arr, 5);
  	append_arr(&arr, 5);
  	insert_arr(&arr, 6, 99);
  	append_arr(&arr, 6);
  	append_arr(&arr, 7);
  	if ( append_arr(&arr, 8) )
  	{
  		printf("追加成功\n"); 
	  }
	  else
	  {
	  	printf("追加失败\n");
	  }
*/	  
	  
  	show_arr(&arr);//显示 
  	inversion_arr(&arr);//倒置 
  	printf("倒置之后的数组内容是:%d\n",val);
  	show_arr(&arr);
  	sort_arr(&arr);
  	show_arr(&arr);
  	
  	//printf("%d\n",arr.len);
  	
  	return 0;
  }
  void init_arr(struct Arr * pArr, int length)//初始化 
  {
  	pArr->pBase = (int *)malloc(sizeof(int) * length);
  	if (NULL == pArr->pBase)
  	{
  		printf("动态内存分配失败!\n");
  		exit(-1);//终止整个程序 
	}
	else
	{
		pArr->len = length;
		pArr->cnt = 0; 
	}
	return;
  }
  
  bool is_empty(struct Arr * pArr)
  {
  	if(0 == pArr->cnt)
  	return true;
  	else
  	return false;
  }
  
  bool is_full(struct Arr * pArr)
  {
  	if(pArr->cnt == pArr->len)
  	return true;
  	else
  	return false;
  }
  
  void show_arr(struct Arr * pArr)
  {
  	if ( is_empty(pArr)==true)//pArr本身就是struct Arr * 类型
  	{
  		printf("数组为空!\n");
	  }
	  else
	  {
	  	for (int i=0; i<pArr->cnt; ++i)
	  	printf("%d ",pArr->pBase[i]);//int *
	  	printf("\n");
	  }
  }
  
  bool append_arr(struct Arr * pArr, int val)
  {
  	//满时返回false 
  	if ( is_full(pArr) )
  	return false;
  	
  	//不满时追加 
  	pArr->pBase[pArr->cnt] = val;
  	(pArr->cnt)++;
  	return true;
  }
  bool insert_arr(struct Arr * pArr, int pos, int val)
  {
  	int i;
  	
  	if (is_full(pArr))
  	return false;
  	
  	if(pos<1 || pos>pArr->cnt+1)//
  	return false;
  	
  	for (i=pArr->cnt-1;i>=pos-1;--i)
  	{
  		pArr->pBase[i+1] = pArr->pBase[i];	
	  }
	  pArr->pBase[pos-1] =val;
	  (pArr->cnt)++;
	  return true;
  }
  
  bool delete_arr(struct Arr * pArr,int pos,int * pVal)
  {
  	int i;
  	
  	if ( is_empty(pArr) )
  	return false;
  	if(pos<1 || pos>pArr->cnt)
  	return false;
  	
  	*pVal = pArr->pBase[pos-1];
  	for (i=pos; i<pArr->cnt; ++i)
  	{
  		pArr->pBase[i-1] = pArr->pBase[i];
	  }	  
  pArr->cnt--;
  return true;
  }
  
  void inversion_arr(struct Arr * pArr)
  {
  	int i=0;
  	int j=pArr->cnt-1;
  	int t;
  	
  	while (i < j)//i,j 均为下标 
  	{
  		t = pArr->pBase[i];
  		pArr->pBase[i] = pArr->pBase[j];
  		pArr->pBase[j] = t;
  		++i;
  		--j;
	  }
	  return ;
  }
  
  void sort_arr(struct Arr * pArr)
  {
  	int i, j, t;
  	
  	for ( i=0; i<pArr->cnt; ++i)
	  {
	  	for (j=1; j<pArr->cnt; ++j)
	  	{
	  		if (pArr->pBase[i] > pArr->pBase[j])
	  		{
	  			t = pArr->pBase[i];
  		        pArr->pBase[i] = pArr->pBase[j];
  				pArr->pBase[j] = t;
			  }
		  }
		}  
   } 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值