数据结构学习之路(一)C语言对数组的简单实现

以下的程序只是在观看郝斌老师讲解的(C语言数据结构)之后自己做得简单练习。

传送门:郝斌-数据结构


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

typedef struct MyArray{
	int * pBase;	//存放数组第一个元素的地址
	int len;		//数组长度
	int cnt;		//数组的有效长度
}* PARR;

void init(PARR, int);
bool append(PARR, int);
bool isEmpty(PARR);
bool isFull(PARR);
void showArray(PARR);
bool insert(PARR, int, int);
bool remove(PARR, int, int *);

int main(void)
{
	PARR pArr;
	init(pArr, 5);
	showArray(pArr);
	append(pArr, 1);
	append(pArr, 2);
	append(pArr, 3);
	append(pArr, 4);
	append(pArr, 5);
	showArray(pArr);
	insert(pArr,5,6);
	showArray(pArr);
	int x;
	remove(pArr,4,&x);
	showArray(pArr);
	printf("%d\n", x);
	insert(pArr,4,6);
	showArray(pArr);
	return 0;
}

/*
初始化数组
*/
void init(PARR pArr, int length)
{
	pArr->pBase = (int *)malloc(sizeof(int)*length);
	if (pArr->pBase==NULL){
		printf("%s\n", "内存分配失败!");
		exit(-1);
	}else{
		pArr->len = length;
		pArr->cnt = 0;
	}
}

void showArray(PARR pArr){
	if (isEmpty(pArr))
		printf("%s\n", "数组为空!");
	else{
		int i;
		for (i=0;i<pArr->cnt;i++)
			printf("%d  ", pArr->pBase[i]);
		printf("\n");
	}
	return;
}

bool isEmpty(PARR pArr){
	if (pArr->cnt==0)
		return true;
	return false;
}

bool isFull(PARR pArr){
	if (pArr->cnt==pArr->len)
		return true;
	return false;
}

bool append(PARR pArr, int val){
	if (isFull(pArr)){
		printf("%s\n", "数组已满!");
		return false;
	}else{
		pArr->pBase[pArr->cnt] = val;
		pArr->cnt++;
		return true;
	}
}


bool insert(PARR pArr, int index, int val){
	if (isFull(pArr)){
		printf("%s\n", "数组已满!");
		return false;
	}

	if (index<0||index>pArr->cnt)
	{
		printf("%s\n", "数组下标越界!");
		return false;
	}

	int i;
	int temp;

	for (i=pArr->cnt; i>index; i--){
		temp = pArr->pBase[i-1];
		pArr->pBase[i-1] = pArr->pBase[i];
		pArr->pBase[i] = temp;
	}
	pArr->pBase[index] = val;
	pArr->cnt++;
	return true;
}

bool remove(PARR pArr, int index, int * pVal){
	if (isEmpty(pArr)){
		printf("%s\n", "数组已空!");
		return false;
	}

	if (index<0||index>pArr->cnt-1){
		printf("%s\n", "数组下标越界!");
		return false;
	}

	int i;
	int temp;
	*pVal=pArr->pBase[index];
	for(i=index; i<pArr->cnt; i++){
		temp = pArr->pBase[i];
		pArr->pBase[i] = pArr->pBase[i+1];
		pArr->pBase[i+1] = temp;
	}
	pArr->cnt--;
	return true;
}


只是实现了数组的一些简单功能,如有不妥的地方,烦请联系我。

email: 17126252@bjtu.edu.cn


版权声明:博客编写不易,转载时请注明出处,万分感谢 !

http://blog.csdn.net/zyy_2018/article/details/79722186



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值