首页 > 技术文章 > 数据结构--数组

jtpw 2020-08-22 22:09 原文

include <stdio.h>

include <malloc.h>

include <stdlib.h>//包含了exit函数

include <windows.h>

//定义了一个数据类型,未分配存储空间
struct Arr
{
int * pBase;//存储数组第一个元素的地址
int len;//当前数组最大容纳的元素个数
int cet;//当前数组的有效个数
};

void init_arr(struct Arr * pArr, int len);//初始化
void show_arr(struct Arr * pArr);//输出
bool is_empty(struct Arr * pArr);//判断数组是否为空
bool is_full(struct Arr * pArr);//判断数组是否为满
void append_arr(struct Arr * pArr, int val);//追加元素
bool insert_arr(struct Arr * pArr, int pos, int val);//插入
bool mgwf_arr(struct Arr * pArr);//元素赋值
bool delete_arr(struct Arr * pArr,int pos);//删除
void get(struct Arr * pArr,int val);//获取下标
void stor_arr(struct Arr * pArr);//排序大到小
void inversion_arr(struct Arr * pArr);//倒置

int main(void)
{
struct Arr arr;

init_arr(&arr,3);
show_arr(&arr);//输出

mgwf_arr(&arr);//赋值
show_arr(&arr);//输出

append_arr(&arr, 6);//追加元素
show_arr(&arr);//输出

insert_arr(&arr,1,10);//插入元素
show_arr(&arr);//输出

delete_arr(&arr, 1);//删除元素
show_arr(&arr);//输出

get(&arr,1);//获取下标

stor_arr(&arr);//从大到小排序
show_arr(&arr);//输出

inversion_arr(&arr);//数组元素倒置
show_arr(&arr);//输出

return 0;

}

//数组元素倒置
void inversion_arr(struct Arr * pArr)
{
int i,q,t;

for(i = 0, t = pArr->cet-1; i!=t || i<t; ++i,--t)
{
	q = pArr->pBase[i];
	pArr->pBase[i] = pArr->pBase[t];
	pArr->pBase[t] = q;
	
}
	
return;

}

//从大到小排序
void stor_arr(struct Arr * pArr)
{
int i,q,p;

for(i = 0; i < pArr->cet; ++i)
{
	for(q = i; q < pArr->cet; ++q)
	{
		if(pArr->pBase[i] < pArr->pBase[q+1])
		{
			p = pArr->pBase[i];
			pArr->pBase[i] = pArr->pBase[q+1];
			pArr->pBase[q+1] = p;
			
		}
		
	}
	
	
}





return;

}

//获取值为val的下标
void get(struct Arr * pArr,int val)
{
int i;

if(is_empty(pArr))
{
	printf("数组为空,获取下标失败!\n");
	return;
}

printf("数值%d的数组下标为:", val);

for(i = 0; i < pArr->cet; ++i)
{
	if(val == pArr->pBase[i])
		printf("%d,", i);	
}

printf("\n");


return;

}

//删除第pos个元素
bool delete_arr(struct Arr * pArr, int pos)
{
int val;//用于保存删除元素的值
int i;

if(pos < 1 || pos > pArr->cet)
	return false;

val = pArr->pBase[pos-1];

for(i = pos-1; i < pArr->cet-1; ++i)
	pArr->pBase[i] = pArr->pBase [i+1];
pArr->cet--;

printf("删除的元素值为:%d\n", val);

return true;

}

//插入元素,在pos位置插入一个元素
bool insert_arr(struct Arr * pArr, int pos, int val)
{
int i;

if(is_full(pArr))
	return false;

if(pArr->cet != NULL)
{
	if(pos<1 || pos>pArr->cet+1)
		return false;
}

for(i = pArr->cet+1; i >= pos; --i)
{
	pArr->pBase[i] = pArr->pBase[i-1];
}

pArr->pBase[pos] = val;

pArr->cet ++;

return true;

}

//元素赋值
bool mgwf_arr(struct Arr * pArr)
{
int i;
int q;
int val;

if(is_full(pArr))
{
	printf("数组已满,数组赋值失败!\n");
	return false;
}


if(pArr->cet < pArr->len)
{
	for(i = pArr->cet; i < pArr->len; ++i)
	{
		printf("请输入元素值:");
		scanf("%d", &val);
		pArr->pBase[i] = val;
		
		pArr->cet++;
		
		if(pArr->cet != pArr->len)
		{
			printf("终止赋值请输入0!\n");
			scanf("%d", &q);
		}
		
		if(q == 0)
			return true;
		
	}
	
}


return true;	

}

//初始化
void init_arr(struct Arr *pArr,int len)
{
pArr->pBase = (int *)malloc(sizeof(int) * len);
if(NULL == pArr->pBase)
{
printf("内存分配失败!\n");
exit(-1);//终止整个函数
}
else
{
pArr->len = len;
pArr->cet = 0;

}
return;

}

//输出
void show_arr(struct Arr * pArr)
{
int i;

if(is_empty(pArr))
{
	printf("数组为空\n");
}

else
	for(i = 0; i < pArr->cet; ++i)
	{
		printf("数组第%d个元素为:%d\n", i+1, pArr->pBase[i]);
	}

}

//判断数组是否为空
bool is_empty(struct Arr * pArr)
{
if(NULL == pArr->cet)
{
return true;//返回的值为真
}
else
{
return false;//返回的值为假
}

}

//判断数组是否是满
bool is_full(struct Arr * pArr)
{
if(pArr->cet == pArr->len)
return true;
else
return false;
}

//追加元素
void append_arr(struct Arr * pArr, int val)
{
int t;
int i;
int q;

if(is_full(pArr))
{
	printf("元素已满,追加失败!\n");
	
	printf("如需要继续追加元素,请输入追加元素个数!否则请输入0!\n");
	printf("追加元素个数为: ");
	scanf("%d",&i);
	
	if(i != 0)
	{
		pArr->len +=i;
		for(pArr->cet; pArr->cet < pArr->len; )
		{	
			printf("请输入追加元素值: ");
			scanf("%d", &t);
			
			pArr->pBase [pArr->cet] = t;
			++pArr->cet;
			
			printf("停止追加元素请输入0!\n");
			printf("输入数值为: ");
			scanf("%d", &q);
			printf("\n");
			
			if(q == 0)
				return;
			
		}
		printf("追加元素成功\n");
		
	}
	else
	{
		printf("末追加元素!\n");
		
	}
	
}


else
{
	for(pArr->cet; pArr->cet < pArr->len; )
	{	
		printf("请输入追加元素值: ");
		scanf("%d", &t);
		
		pArr->pBase [pArr->cet] = t;
		++pArr->cet;
		
		printf("停止追加元素请输入0!\n");
		printf("输入数值为: ");
		scanf("%d", &q);
		printf("\n");
		
		if(q == 0)
			return;			
	}
	
	printf("追加元素成功\n");
	
}



return;

}

推荐阅读