郝斌数据结构p11-p13代码详解
郝斌数据结构p11-p13代码详解先给出完整的代码append_arr()函数代码块及比较详细的解释结尾
郝斌数据结构p11-p13代码详解
这里是关于函数append_arr()里面调用的方法的解释,欢迎大佬们指正批评
先给出完整的代码
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
struct Arr
{
int * pBase
;
int len
;
int cnt
;
};
void init_arr(struct Arr
* pArr
, int length
);
bool
append_arr(struct Arr
* pArr
, int val
);
bool
insert_arr(struct Arr
* pArr
, int pos
, int val
);
bool
delete_arr(struct Arr
* pArr
, int pos
, int * pVal
);
int get();
bool
is_empty(struct Arr
* pArr
);
bool
is_full(struct Arr
* pArr
);
void sort_arr(struct Arr
* pArr
);
void show_arr(struct Arr
* pArr
);
void inversion_arr(struct Arr
* pArr
);
int main(void)
{
struct Arr arr
;
int val
;
init_arr(&arr
, 6);
show_arr(&arr
);
append_arr(&arr
, 1);
append_arr(&arr
, 10);
append_arr(&arr
, -3);
append_arr(&arr
, 6);
append_arr(&arr
, 88);
append_arr(&arr
, 11);
if ( delete_arr(&arr
, 4, &val
) )
{
printf("删除成功!\n");
printf("您删除的元素是: %d\n", val
);
}
else
{
printf("删除失败!\n");
}
show_arr(&arr
);
inversion_arr(&arr
);
printf("倒置之后的数组内容是:\n");
show_arr(&arr
);
sort_arr(&arr
);
show_arr(&arr
);
return 0;
}
void init_arr(struct Arr
* pArr
, int length
)
{
pArr
->pBase
= (int *)malloc(sizeof(int) * length
);
if (NULL == pArr
->pBase
)
{
printf("动态内存分配失败!\n");
exit(-1);
}
else
{
pArr
->len
= length
;
pArr
->cnt
= 0;
}
return;
}
bool
is_empty(struct Arr
* pArr
)
{
if (0 == pArr
->cnt
)
return true
;
else
return false
;
}
bool
is_full(struct Arr
* pArr
)
{
if (pArr
->cnt
== pArr
->len
)
return true
;
else
return false
;
}
void show_arr(struct Arr
* pArr
)
{
if ( is_empty(pArr
) )
{
printf("数组为空!\n");
}
else
{
for (int i
=0; i
<pArr
->cnt
; ++i
)
printf("%d ", pArr
->pBase
[i
]);
printf("\n");
}
}
bool
append_arr(struct Arr
* pArr
, int val
)
{
if ( is_full(pArr
) )
return false
;
pArr
->pBase
[pArr
->cnt
] = val
;
(pArr
->cnt
)++;
return true
;
}
bool
insert_arr(struct Arr
* pArr
, int pos
, int val
)
{
int i
;
if (is_full(pArr
))
return false
;
if (pos
<1 || pos
>pArr
->cnt
+1)
return false
;
for (i
=pArr
->cnt
-1; i
>=pos
-1; --i
)
{
pArr
->pBase
[i
+1] = pArr
->pBase
[i
];
}
pArr
->pBase
[pos
-1] = val
;
(pArr
->cnt
)++;
return true
;
}
bool
delete_arr(struct Arr
* pArr
, int pos
, int * pVal
)
{
int i
;
if ( is_empty(pArr
) )
return false
;
if (pos
<1 || pos
>pArr
->cnt
)
return false
;
*pVal
= pArr
->pBase
[pos
-1];
for (i
=pos
; i
<pArr
->cnt
; ++i
)
{
pArr
->pBase
[i
-1] = pArr
->pBase
[i
];
}
pArr
->cnt
--;
return true
;
}
void inversion_arr(struct Arr
* pArr
)
{
int i
= 0;
int j
= pArr
->cnt
-1;
int t
;
while (i
< j
)
{
t
= pArr
->pBase
[i
];
pArr
->pBase
[i
] = pArr
->pBase
[j
];
pArr
->pBase
[j
] = t
;
++i
;
--j
;
}
return;
}
void sort_arr(struct Arr
* pArr
)
{
int i
, j
, t
;
for (i
=0; i
<pArr
->cnt
; ++i
)
{
for (j
=i
+1; j
<pArr
->cnt
; ++j
)
{
if (pArr
->pBase
[i
] > pArr
->pBase
[j
])
{
t
= pArr
->pBase
[i
];
pArr
->pBase
[i
] = pArr
->pBase
[j
];
pArr
->pBase
[j
] = t
;
}
}
}
}
append_arr()函数代码块及比较详细的解释
bool
append_arr(struct Arr
* pArr
, int val
)
{
if( is_full(pArr
))
return false
;
pArr
->pBase
[pArr
->cnt
] = val
;
(pArr
->cnt
)++;
return true
;
}
注意:这里追加的意思是:将后来的数额附加在原数上,我刚开始的时候连这个词的字面意思都不是很理解,也会出现不小的问题。
结尾
博客新手,还请各位担待,写这个的主要目的还是加强自己的理解,同时向一些不懂的同好一起分享一下经验,同时也吸取一些大牛的指点