数据结构与算法学习笔记——数组

1.1基本概念

线性结构:把所有的结点用一根直线穿起来。存储方式分为  线性存储(数组)、 离散存储(链表)。线性结构常见的应用为栈和队列。
模拟数组的实现:

定义一个数组的结构体    
struct Arr
{
	int * pBase; //存放数组的第一个元素的地址 
	int len;//存放数组的总长度 
	int cnt;//存放数组的有效长度 
};
初始化数组
void init_arr(struct Arr * pArr,int length)
{
  pArr->pBase = (int *)(malloc(sizeof(int) * length));
  //判断动态分配的内存是否为空
  if(NULL == pArr->pBase)
  {
  	exit(-1);
  	printf("动态内存分配失败\n");
  }	
  else
  {
  	 pArr->len = length;
     pArr->cnt = 0;
  }
} 
判断数组是否为空
bool is_empty(struct Arr * pArr)
{
	if(0 == pArr->cnt)
	{
		return true;
	}
	else
	{
		return false;
	}
} 
判断数组是否已满
bool is_full(struct Arr * pArr)
{
	if(pArr->len == pArr->cnt)
	{
		return true;
	}
	else
	{
		return false;
	}
} 
数组展示
void show_arr(struct Arr * pArr)
{
	if(is_empty(pArr))
	{
		printf("数组为空/n");
	} 
	for(int i=0;icnt;i++)
	{
	  printf("%d",pArr->pBase[i]);	
	  printf("/n");
	} 
}
数组的追加
bool append_arr(struct Arr * pArr,int pval)
{
	if(is_full)
	{
	  	return false;
	}
	pArr->pBase[pArr->cnt]=pval;
	pArr->cnt++;
}
数组的插入 pos为插入的位置,从1开始
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(int i=pArr->cnt-1;i>=pos-1;i--)
	{
	  pArr->pBase[i+1]=pArr->pBase[i];	
	}
	pArr->pBase[pos-1]=val;
	
	return true;
}
根据位置删除 ,pos为删除的位置,从1开始 
bool delete_arr(struct Arr * pArr,int pos,int *pVal)
{
	if(is_empty(pArr))
	{
	   return false;	
	}
	if(pos<1|| pos>pArr->cnt)
	{
		return false;
	}
	*pVal = pArr->pBase[pos-1];
	for(int i=pos;icnt;i++)
	{
		pArr->pBase[i-1]=pArr->pBase[i];
	}
	pArr->cnt--;
	return true;
}
反转
void insversion_arr(struct Arr * pArr)
{
	int i=0;
	int j=pArr->cnt-1;
	int t;
	while(ipBase[i];
		pArr->pBase[i]=pArr->pBase[j];
		pArr->pBase[j]=t;
		++i;
		--j;
	}
	return;
} 










你可能感兴趣的:(数据结构与算法)