链表的数字实现

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

typedef struct ARR
{
	int * pbase;									//数据域 
	int len;										//数组长度 
	int cnt;										//有效个数 
}Arr,*parr;

void init(parr arr,int lengh);							//创建数组 
bool empty(parr arr);									//判空 
bool full(parr arr);									//判满 
void show(parr arr);									//输出 
bool append(parr arr,int val);							//追加 
bool insert(parr arr,int pos,int val);					//插入 
bool deletearr(parr arr,int pos,int *val);				//删除 
void inversion(parr arr);								//倒置 
void sortarr(parr arr);									//排序 

int main (void)
{
	parr  arr;
	arr = (parr)malloc(sizeof(Arr));					//为指针分配空间 
	int val;
	init(arr,6);
	show(arr);
	append(arr,1); 
	append(arr,2); 
	append(arr,3); 
	append(arr,4); 
	if (deletearr(arr,1,&val))
	{
		printf ("删除成功\n");
		printf ("您删除的元素是:%d\n",val);
	}
	else
	printf ("删除失败");
	
	
	show(arr);
	inversion(arr);
	printf ("倒置后的数字内容是:\n");
	show(arr);
	sortarr(arr);
	show(arr);
	
	
	return 0;
}

void init(parr arr,int lengh)
{
	arr->pbase = (int *)malloc(sizeof(int)*lengh);						//为数组分配空间 
	if (arr->pbase == NULL)
	exit(-1);
	arr->len = lengh;
	arr->cnt = 0;
	return;
}

bool empty(parr arr)
{
	if (0 == arr->cnt)
	return true;
	else
	return false;
}

bool full(parr arr)
{
	if (arr->cnt == arr->len)
	return true;
	else
	return false;
}

void show(parr arr)
{
	int i;
	if (empty(arr))
	printf ("数组为空\n");
	else
	{
		for (i=0;i<arr->cnt;++i)
		printf ("%d ",arr->pbase[i]);
		
		printf ("\n");
	}
}

bool append(parr arr,int val)
{
	if (full(arr))
	return false;
	else
	{
		arr->pbase[arr->cnt] = val;
		++(arr->cnt);
		return true;
	}
}

bool insert(parr arr,int pos,int val)
{
	int i;
	if (full(arr))
	return false;
	
	if (pos<1 || pos>arr->cnt+1)
	return false;
	
	for (i=arr->cnt+1;i >= pos-1;--i)								//指定位置之后的元素后移一位 
	{
		arr->pbase[i+1] = arr->pbase[i];
	}
	arr->pbase[pos-1] = val;
	++arr->cnt;
	
	return true;
}

bool deletearr(parr arr,int pos,int *val)
{
	int i;
	if (empty(arr))
	return false;
	
	if (pos<1 || pos>arr->cnt)
	return false;
	
	*val = arr->pbase[pos-1];
	for (i=pos;i<arr->cnt;++i)									//指定位置之后的元素前移一位 
	arr->pbase[i-1] = arr->pbase[i];
	
	--arr->cnt;
	return true;
}

void inversion(parr arr)
{
	int i=0;
	int j = arr->cnt-1;
	int t;
	while(i<j)
	{
		t = arr->pbase[i];
		arr->pbase[i] = arr->pbase[j];
		arr->pbase[j] = t;
		++i;
		--j;
	}
	return;
}

void sortarr(parr arr)
{
	int i,j,t;
	for (i=0;i<arr->cnt-1;++i)
	{
		for (j=i+1;j<arr->cnt;++j)
		{
			if (arr->pbase[i] >= arr->pbase[j])
			{
				t = arr->pbase[i];
				arr->pbase[i] = arr->pbase[j];
				arr->pbase[j] = t;
			}
		}
	}
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值