c 实现 php 数组,C语言实现数组功能

array.h 文件

typedef struct {

int len;

int num;

int *head;

} A;

void init_array(A *a, int len); /* 初始化数组 */

bool array_push(A *a, int value); /* 将元素推到数组末尾, */

bool is_full(A *a); /* 数组是否已满 */

void traverse_array(A *a); /* 遍历数组 */

void inverse_array(A *a); /* 翻转数组 */

int array_pop(A *a); /* 删除最后一个元素,返回被删除的元素 */

void array_insert(A *a, int index, int value); /* 插入元素 */

array.c 文件

#include

#include

#include

#include

#include "array.h"

int main()

{

A a;

int len;

int num = 0;

int value;

printf("请输入数组的长度:");

scanf("%d", &len);

init_array(&a, len);

printf("\n请输入数组的值: ");

while (scanf("%d", &value) == 1 && num < len) {

if (array_push(&a, value)) {

printf("成功添加%d\n", value);

} else {

printf("%d添加失败\n", value);

}

num++;

}

traverse_array(&a); /* 遍历数组 */

inverse_array(&a); /* 翻转数组 */

traverse_array(&a); /* 重新遍历数组 */

array_pop(&a); /* 删除末尾一个元素 */

array_pop(&a); /* 删除末尾一个元素 */

traverse_array(&a);

array_insert(&a, 0, 111); /* 首位插入新元素111 */

traverse_array(&a);

array_insert(&a, 3, 333); /* 试一下插入一个错误的值 */

traverse_array(&a);

return 0;

}

void init_array(A *a, int len)

{

if (len <= 0) {

return ;

}

a->head = (int *)malloc(sizeof(int) * len);

if (a->head == NULL) {

printf("创建内存失败\n");

exit(-1);

}

a->len = len;

a->num = 0;

}

bool array_push(A *a, int value)

{

if (is_full(a)) {

printf ("当前数组已满,%d插入失败\n", value);

return false;

}

a->head[a->num] = value;

a->num++;

return true;

}

bool is_full(A *a)

{

if (a->num == a->len) {

return true;

} else {

return false;

}

}

bool is_empty(A *a)

{

if (a->num == 0) {

return true;

} else {

return false;

}

}

void traverse_array(A *a)

{

if (is_empty(a)) {

printf("当前数组为空\n");

exit(-1);

}

printf("\n当前数组内容为:\n");

int i;

for (i = 0; i < a->num; i++) {

printf("%i ", a->head[i]);

}

printf("\n");

}

void inverse_array(A *a)

{

if (is_empty(a)) {

printf("当前数组为空\n");

exit(-1);

}

int end = a->num - 1;

int start = 0;

int temp;

while (start < end) {

temp = a->head[start];

a->head[start] = a->head[end];

a->head[end] = temp;

start++;

end--;

}

}

int array_pop(A *a)

{

if (is_empty(a)) {

printf("当前数组为空\n");

exit(-1);

}

a->num--; /* TODO 并没有真正的删除 */

return a->head[a->num];

}

void array_insert(A *a, int index, int value)

{

if (is_full(a)) {

printf("当前数组已满\n");

exit(-1);

}

if (index + 1 > a->len || index < 0) {

printf("插入位置超过了数组最大长度\n");

exit(-1);

}

if (a->head[index]) {

int temp;

int i;

for (i = a->num; i > index; i--) {

a->head[i] = a->head[i-1];

}

}

a->head[index] = value;

a->num++;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值