数据结构-数组篇

数组采取连续存储,代码定义了一个结构体,里面包含数组的信息,实现代码如下:

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

void init(struct array *arr, int length);  //初始化
int add(struct array *arr, int item);      //添加元素
int remove(struct array *arr, int address, int *removeItem);  //删除元素
void sort(struct array *arr);   //排序(升序)
void show(struct array *arr);   //显示所有元素
int insert(struct array *arr, int address, int item);  插入元素
int reverse(struct array *arr);   //倒序

struct array
{
	int *pBase;  //第一个元素的地址
	int len;     //数组的总长度
	int allnum;  //数组当前元素的个数
};

void main()
{
	struct array arr;
	int bo = 1;
	int choose;
	int length;
	int item;
	int address;
	int removeItem;
	while(bo == 1)
	{
		printf("对此数组提供以下功能:\n");
		printf("1. 初始化\n");
		printf("2. 添加元素\n");
		printf("3. 插入元素\n");
		printf("4. 删除元素\n");
		printf("5. 倒序\n");
		printf("6. 排序\n");
		printf("7. 显示所有元素\n");
		printf("请选择要进行的操作(选0退出):");
		scanf("%d", &choose);
		switch(choose)
		{
		case 1:
			printf("请输入要初始化的长度:");
			scanf("%d", &length);
			init(&arr, length);
			printf("初始化成功!\n\n");
			break;
		case 2:
			printf("请输入要添加的元素:");
			scanf("%d", &item);
			add(&arr, item);
			break;
		case 3:
			while(1)
			{
				printf("请输入要插入的位置: ");
				scanf("%d", &address);
				if(address > arr.allnum+1 || address <=0)
				{
					printf("不在范围内, 请重新输入!\n");
					continue;
				}
				break;
			}
			printf("请输入要插入的元素: ");
			scanf("%d", &item);
			insert(&arr, address, item);
			break;
		case 4:
			printf("请输入要删除的元素的位置:");
			scanf("%d", &address);
			if(address > arr.allnum || address <= 0)
			{
				printf("要删除的元素不在范围内!");
			}
			else
			{
				remove(&arr, address, &removeItem);
				printf("成功删除数字%d\n\n", removeItem);
			}
			break;
		case 5:
			reverse(&arr);
			break;
		case 6:
			sort(&arr);
			break;
		case 7:
			show(&arr);
			break;
		default:
			exit(-1);
		}
	}
}

//初始化
void init(struct array *arr, int length)
{
	arr->pBase = (int*)malloc(sizeof(int) * length);
	arr->len = length;
	arr->allnum = 0;
}

//添加元素
int add(struct array *arr, int item)
{
	if(arr->allnum < arr->len)
	{
		arr->pBase[arr->allnum] = item;
		arr->allnum++;
		printf("添加成功!\n\n");
		return 1;
	}
	else
	{
		printf("数组已满,无法添加!\n\n");
		return 0;
	}
}
//插入元素
int insert(struct array *arr, int address, int item)
{
	int i;
	if(arr->allnum < arr->len)
	{
		for(i=arr->allnum; i>=address; i--)
		{
			arr->pBase[i] = arr->pBase[i-1];
		}
		arr->pBase[address-1] = item;
		printf("插入成功!\n\n");
		arr->allnum++;
		return 1;
	}
	else
	{
		printf("数组已满,无法插入!\n\n");
		return 0;
	}
}

//倒序
int reverse(struct array *arr)
{
	int i;
	int temp;
	int index = arr->allnum/2;
	if(arr->allnum == 0)
	{
		printf("数组为空!\n\n");
		return 0;
	}
	for(i=0; i<index; i++)
	{
		temp = arr->pBase[i];
		arr->pBase[i] = arr->pBase[arr->allnum-(i+1)];
		arr->pBase[arr->allnum-(i+1)] = temp;
	}
	printf("倒序成功!\n\n");
	return 1;
}

//排序
void sort(struct array *arr)
{
	int i, j, temp;
	if(arr->allnum == 0)
	{
		printf("数组为空!\n\n");
		return;
	}
	else
	{
		for(i=0; i<arr->allnum; i++)
		{
			for(j=i+1; j<arr->allnum; j++)
			{
				if(arr->pBase[i] > arr->pBase[j])
				{
					temp = arr->pBase[i];
					arr->pBase[i] = arr->pBase[j];
					arr->pBase[j] = temp;
				}
			}
		}
		printf("排序成功!\n\n");
	}
}

//删除元素
int remove(struct array *arr, int address, int *removeItem)
{
	int i;
	if(arr->allnum == 0)
	{
		printf("数组为空!\n\n");
		return 0;
	}
	else
	{
		*removeItem = arr->pBase[address-1];     //将被删除的数保存在removeItem中
		for(i=address; i<arr->allnum; i++)
		{
			arr->pBase[i-1] = arr->pBase[i];
		}
		arr->allnum--;
		return 1;
	}
}

//查看所有元素
void show(struct array *arr)
{
	int i;
	for(i=0; i<arr->allnum; i++)
	{
		printf("%d ", arr->pBase[i]);
	}
	printf("\n\n");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值