数组的一些相关操作

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <malloc.h>

//定义数据类型  array
typedef struct Array
{
	int *arrpBase;			//存储数组首元素的地址
	int arrLength; 			//数组所能容纳最大元素个数
	int arrAcount;		        //当前数组有效元素的个数
}Array;

//向外界提供的操作方法
void initializeArray(Array *p,int length);			//初始化
bool appendArray(Array *p,int value);				//追加
bool insertArray(Array *p,int postion, int value);		//插入,参数postin从1开始
bool deleteArray(Array *p,int postion, int *pValue);            //删除
int  findArrValue(Array *p,int value);				//查找
bool isEmpty(Array *p);						//判断是否为空
bool isFull(Array *p);						//是否已存满
void sortArray(Array *p);					//排序
void showArray(Array *p); 					//显示
void inverArray(Array *p);					//倒置

int main()
{
	Array arr;
	int devalue;
	
	initializeArray(&arr,5);
	
	appendArray(&arr,1);
	appendArray(&arr,2);
	appendArray(&arr,3);
	appendArray(&arr,4);
	appendArray(&arr,5);
	showArray(&arr);
	if(deleteArray(&arr,2,&devalue))
		{
			printf("Delete succeed!\n");
			printf("The value delete of is %d\n",devalue);
		}
	else
		{
			printf("Delete failer!\n");
		}
	showArray(&arr);
	if(findArrValue(&arr,5) != -1)
		{
			printf("find the value of %d index is %d\n",5,findArrValue(&arr,5));
		}
	return 0;
}


void initializeArray(Array *p,int length)   				//初始化数组
{
	p->arrpBase = (int *)malloc(sizeof(int) * length);//分配内存
	if(p == NULL)
		{
			printf("ERROR:memory allocation failure!\n");//内存分配失败
			exit(-1);																			//终止程序
		}
		else
			{
				p->arrLength = length;
				p->arrAcount = 0;
			}
	return ;
}

bool isEmpty(Array *p)			//判断是否为空
{
	if(p->arrAcount == 0)
		return true;
	else
		return false;
}

bool isFull(Array *p)			//是否已存满
{
	if(p->arrLength == p->arrAcount)
		return true;
	else
		return false;
}

void showArray(Array *p) 		//显示
{
	int i = 0;
	if(isEmpty(p))
		printf("Warning :array is empty!\n");
	else
		{
			for(i = 0; i < p->arrAcount; ++i )
			{
				printf("%d ",p->arrpBase[i]);
			}
			printf("\n");
		}
}

bool appendArray(Array *p,int value)		    //追加
{  
	if(isFull(p))
		return false;
	
	//不满足时追加
	p->arrpBase[p->arrAcount] = value;
	p->arrAcount++;
		return true;	
}

bool insertArray(Array *p,int postion, int value)     //插入,参数postin从1开时
{
	int i = 0;
	
	if(isFull(p))
		return false;
	//位置的判断
	if(postion < 1 || postion > p->arrAcount + 1)
		return false;
	
	for(i = p->arrAcount - 1; i>= postion - 1; --i)
	{
		p->arrpBase[i+1] = p->arrpBase[i];
	}
	p->arrpBase[postion-1] = value;
	p->arrAcount++;//个数加1
	
	return true;
}

bool deleteArray(Array *p,int postion,int *pValue) 	//删除
{
	int i = 0;
	if(isEmpty(p))
		return false;
	if(postion<1 || postion > p->arrAcount)
		return false;
	*pValue = p->arrpBase[postion - 1];
	
	for(i = postion; i< p->arrAcount; ++i)
	{
		p->arrpBase[i - 1] = p->arrpBase[i];
	}
	p->arrAcount--;
	return true;
}

void inverArray(Array *p)		//倒置
{
	int temp = 0;
	int i = 0;
	int j = p->arrAcount - 1;
	while(i < j)
	{
		temp = p->arrpBase[i];
		p->arrpBase[i] = p->arrpBase[j];
		p->arrpBase[j] = temp;
		++i;
		--j;
	}
}

void sortArray(Array *p)		//排序
{
	int i	 	 = 0;
	int j 	 = 0;
	int temp = 0;
	
	for(i = 0; i < p->arrAcount; ++i )
	{
			for(j = i + 1; j < p->arrAcount; ++j)
			{
				if(p->arrpBase[i] > p->arrpBase[j])
				 {
						temp = p->arrpBase[i];
						p->arrpBase[i] = p->arrpBase[j];
						p->arrpBase[j] = temp;
				 }
			}
	}
}

int  findArrValue(Array *p,int value)	//查找
{
	int i = 0;
	int val = 0;
	if(isEmpty(p))
		return -1;		
	for(i = 0; i < p->arrAcount; ++i )
	{
		if(p->arrpBase[i] == value)
			val = i;
		else
			val = -1;
	}
	return val;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值