代码注释部分已经很详细啦,直接看代码就好
代码思路:
头文件
结构体类型定义
函数声明
{
}
函数实现
{
增删改查
排序
倒置
判空
判满
...
}
主函数
{
调用测试案例
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct Arr
{
int* pBase;
int len;
int cnt;
}Array,*Arr;
void init_arr(Array* pArr,int length);
int insert_arr(Array* pArr,int pos,int val);
int append_arr();
int delete_arr(Array* pArr, int pos, int* val);
int isEmpty(Array* pArr);
int isFull(Array* pArr);
void sort_arr(Array* pArr);
void show_arr(Array* pArr);
void inversion_arr(Array* pArr);
void init_arr(Array* pArr, int length)
{
pArr->pBase=(int*)malloc(sizeof(int)*length);
if (NULL == pArr->pBase)
{
printf("动态内存分配失败");
exit(-1);
}
else
{
pArr->len = length;
pArr->cnt = 0;
}
return;
}
int applend_arr(Array* pArr, int val)
{
pArr->pBase[pArr->cnt] = val;
(pArr->cnt)++;
return 1;
}
int is_empty(Array* pArr)
{
if (0 == pArr->cnt)
return 1;
else
return 0;
}
int isFull(Array* pArr)
{
if (pArr->cnt== pArr->len)
{
return 1;
}
else
{
return 0;
}
}
void show_arr(Array *pArr)
{
int i = 0;
if (1 == is_empty(pArr))
{
printf("the list is empty!\n");
}
else
{
for (i = 0; i < pArr->cnt; i++)
printf("%d\n", pArr->pBase[i]);
}
}
int insert_arr(Array* pArr, int pos,int val)
{
int i = 0;
if (isFull(pArr))
{
printf("表已满,不能插入\n");
return 0;
}
if (pos<0 || pos > pArr->cnt + 1)
{
printf("插入位置不合法");
return 0;
}
else
{
int i = 0;
for (i = pArr->cnt - 1; i >= pos - 1; i--) {
pArr->pBase[i + 1] = pArr->pBase[i];
}
pArr->pBase[pos - 1] = val;
pArr->cnt++;
return 1;
}
}
int delete_arr(Array* pArr,int pos,int* val)
{
int i;
if (is_empty(pArr))
{
printf("空表不能删除");
return 0;
}
if (pos > pArr->cnt || pos < 1)
{
printf("删除位置非法");
return 0;
}
*val = pArr->pBase[pos - 1];
for (i = pos; i < pArr->cnt; i++)
{
pArr->pBase[i - 1] = pArr->pBase[i];
}
pArr->cnt--;
return 1;
}
void sort_arr(Array* pArr)
{
int i = 0;
int temp;
for (i = 0; i < pArr->cnt; i++)
{
for (int j = 0; j + 1 < pArr->cnt - i; j++)
{
if (pArr->pBase[j] < pArr->pBase[j + 1])
{
temp = pArr->pBase[j + 1];
pArr->pBase[j + 1] = pArr->pBase[j];
pArr->pBase[j] = temp;
}
}
}
show_arr(pArr);
return;
}
void inversion_arr(Array* pArr)
{
int i = 0;
int j = pArr->cnt - 1;;
int temp;
while (i < j)
{
temp = pArr->pBase[i];
pArr->pBase[i] = pArr->pBase[j];
pArr->pBase[j] = temp;
i++;
j--;
}
return;
}
int main()
{
int* val;
Array arr;
int length = 10;
init_arr(&arr, length);
int i = 0;
for (i = 0; i < 10; i++) {
applend_arr(&arr, i);
}
show_arr(&arr);
insert_arr(&arr, 3, 6);
show_arr(&arr);
delete_arr(&arr, 1, &val);
show_arr(&arr);
printf("%d\n", val);
sort_arr(&arr);
inversion_arr(&arr);
show_arr(&arr);
return 0;
}
运行结果: 仔细分析代码运行过程以及结果进行复习。 其中用到了冒泡排序算法。
|