手写数组

/*
* 手写数组,实现“判断数组状态”,“追加”,“插入”,“删除”
* @Bight
* 2020年2月8日
*/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct Add{
	int * pBase;
	int len;
	int cnt;
}Arr;


void show_arr(Add * pArr);
void init_arr(Add * pArr, int length);//初始化数组
bool is_empty(Add * pArr);//判断为空
bool is_full(Add * pArr);//判断为满
bool insert_arr(Add * pArr, int pos, int val); //插入 
bool addition_arr(Add * pArr, int val);
bool delete_arr(Add * pArr, int pos , int * pVal);


int main()
{
	Arr arr;
	int val;
	return 0;
}

void init_arr(Add * 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_full(Add * pArr)
{
	if (pArr->cnt == pArr->len)
		return true;
	else 
		return false;
}


bool addition_arr(Add * pArr, int val)
{
	if( is_full(pArr) )
	{
		printf("数组已满,无法再次追加新值!\n");
		return false;
	}
	else
	{
	    pArr->pBase[pArr->cnt] = val;
	    pArr->cnt++;
	}
}

bool insert_arr(Add * pArr, int pos, int val)
{
	if ( pos<1 || pos > pArr->cnt + 1 )
	{
		printf("插入位置无效,请尝试重新插入\n");
		return false;
	}
	else if ( is_full(pArr) )
	{
		printf("数组已满,无法插入新值\n");
		return false;
	}
	else{
		for (int i = pArr->cnt-1; i >= pos-1; i--)
		{
			pArr->pBase[i+1] = pArr->pBase[i];
		}
		pArr->pBase[pos-1] = val;
		pArr->cnt++;
	}
}

void show_arr(Add * pArr)
{
	if ( is_empty(pArr) )
	{
		printf("数组为空\n");
	}
	else
	{
		for (int i = 0; i < pArr->cnt; i++)
		{
			printf("%d ",pArr->pBase[i]);
		}
		printf("\n");
	}
}

bool is_empty(Add * pArr)
{
	if (pArr->cnt == 0){
		return true;
	}
	else 
		return false;
}

bool delete_arr(Add * pArr, int pos , int * pVal)
{
	if ( is_empty(pArr) )
		return false;
	if (pos<1 || pos>pArr->cnt-1)
		return false;
	
	*pVal = pArr->pBase[pos-1];
	for (int  i = pos; i < pArr->cnt; i++)
	{
		pArr->pBase[i-1] = pArr->pBase[i];
	}
	pArr->cnt--;
}
posted @ 2020-02-08 17:41  ymyguang  阅读(194)  评论(0编辑  收藏  举报