#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
typedef struct Arr
{
int *pBase; //存储数组第一个元素地址
int len; //数组可存放长度
int cnt; //数组现有元素长度
}Array, *pArray;
//创建数组结构体里包含一个指针:指向连续开辟空间首地址;一个数组长度标识;一个现有元素长度标识
void init_arr(pArray pArr, int length);
bool is_empty(pArray pArr);
bool is_full(pArray pArr);
bool append_arr(pArray pArr, int val);
bool insert_arr(pArray pArr, int pos, int val);
bool delete_arr(pArray pArr, int pos);
void show_arr(pArray pArr);
void sort_arr(pArray pArr);
int main(void)
{
Array a;
init_arr(&a, 10);
append_arr(&a, 1);
append_arr(&a, 2);
append_arr(&a, 2);
append_arr(&a, 3);
append_arr(&a, 4);
insert_arr(&a, 1, 10);
delete_arr(&a, 0);
sort_arr(&a);
// append_arr(&a, 5);
// append_arr(&a, 6);
show_arr(&a);
return 0;
}
void init_arr(pArray 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(pArray pArr)
{
if (0 == pArr->cnt)
{
return true;
}
else
{
return false;
}
}
bool is_full(pArray pArr)
{
if (pArr->cnt == pArr->len)
{
return true;
}
else
{
return false;
}
}
bool append_arr(pArray pArr, int val)
{
if(is_full(pArr))
{
printf("数组已满,无法加入元素!\n");
return false;
}
else
{
pArr->pBase[pArr->cnt] = val;
pArr->cnt++;
}
}
void show_arr(pArray pArr)
{
if (is_empty(pArr))
{
printf("数组为空\n");
return;
}
else
{
for(int i=0; i<pArr->cnt; i++)
{
printf("%d ", pArr->pBase[i]);
}
printf("\n");
}
}
/*插入的地方pos从1开始*/
bool insert_arr(pArray pArr, int pos, int val)
{
if (is_full(pArr)) //数组已满的情况
{
printf("数组已满,无法插入\n");
return false;
}
else if(pos<1 || pos>(pArr->cnt+1))
{
printf("位置错误,无法插入\n");
return false;
}
else
{
for(int i=pArr->cnt; i>=pos; i--)
{
pArr->pBase[i] = pArr->pBase[i-1];
}
(pArr->cnt)++;
pArr->pBase[pos-1] = val;
return true;
}
}
/*删除的地方pos从1开始*/
bool delete_arr(pArray pArr, int pos)
{
if(is_empty(pArr))
{
printf("数组为空,无法删除\n");
return false;
}
if (pos>pArr->cnt||pos<1)
{
printf("该元素不存在!!!\n");
return false;
}
else
{
for(int i=pos; i<pArr->cnt; i++)
{
pArr->pBase[i-1] = pArr->pBase[i];
}
pArr->cnt--;
return true;
}
}
void sort_arr(pArray pArr)
{
int temp;
int i, j;
for(i=0; i<pArr->cnt; i++)
{
for(j=i+1; j<pArr->cnt; j++)
{
if(pArr->pBase[i] > pArr->pBase[j])
{
temp = pArr->pBase[i];
pArr->pBase[i] = pArr->pBase[j];
pArr->pBase[j] = temp;
}
}
}
}
#include "malloc.h"
#include "stdlib.h"
typedef struct Arr
{
int *pBase; //存储数组第一个元素地址
int len; //数组可存放长度
int cnt; //数组现有元素长度
}Array, *pArray;
//创建数组结构体里包含一个指针:指向连续开辟空间首地址;一个数组长度标识;一个现有元素长度标识
void init_arr(pArray pArr, int length);
bool is_empty(pArray pArr);
bool is_full(pArray pArr);
bool append_arr(pArray pArr, int val);
bool insert_arr(pArray pArr, int pos, int val);
bool delete_arr(pArray pArr, int pos);
void show_arr(pArray pArr);
void sort_arr(pArray pArr);
int main(void)
{
Array a;
init_arr(&a, 10);
append_arr(&a, 1);
append_arr(&a, 2);
append_arr(&a, 2);
append_arr(&a, 3);
append_arr(&a, 4);
insert_arr(&a, 1, 10);
delete_arr(&a, 0);
sort_arr(&a);
// append_arr(&a, 5);
// append_arr(&a, 6);
show_arr(&a);
return 0;
}
void init_arr(pArray 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(pArray pArr)
{
if (0 == pArr->cnt)
{
return true;
}
else
{
return false;
}
}
bool is_full(pArray pArr)
{
if (pArr->cnt == pArr->len)
{
return true;
}
else
{
return false;
}
}
bool append_arr(pArray pArr, int val)
{
if(is_full(pArr))
{
printf("数组已满,无法加入元素!\n");
return false;
}
else
{
pArr->pBase[pArr->cnt] = val;
pArr->cnt++;
}
}
void show_arr(pArray pArr)
{
if (is_empty(pArr))
{
printf("数组为空\n");
return;
}
else
{
for(int i=0; i<pArr->cnt; i++)
{
printf("%d ", pArr->pBase[i]);
}
printf("\n");
}
}
/*插入的地方pos从1开始*/
bool insert_arr(pArray pArr, int pos, int val)
{
if (is_full(pArr)) //数组已满的情况
{
printf("数组已满,无法插入\n");
return false;
}
else if(pos<1 || pos>(pArr->cnt+1))
{
printf("位置错误,无法插入\n");
return false;
}
else
{
for(int i=pArr->cnt; i>=pos; i--)
{
pArr->pBase[i] = pArr->pBase[i-1];
}
(pArr->cnt)++;
pArr->pBase[pos-1] = val;
return true;
}
}
/*删除的地方pos从1开始*/
bool delete_arr(pArray pArr, int pos)
{
if(is_empty(pArr))
{
printf("数组为空,无法删除\n");
return false;
}
if (pos>pArr->cnt||pos<1)
{
printf("该元素不存在!!!\n");
return false;
}
else
{
for(int i=pos; i<pArr->cnt; i++)
{
pArr->pBase[i-1] = pArr->pBase[i];
}
pArr->cnt--;
return true;
}
}
void sort_arr(pArray pArr)
{
int temp;
int i, j;
for(i=0; i<pArr->cnt; i++)
{
for(j=i+1; j<pArr->cnt; j++)
{
if(pArr->pBase[i] > pArr->pBase[j])
{
temp = pArr->pBase[i];
pArr->pBase[i] = pArr->pBase[j];
pArr->pBase[j] = temp;
}
}
}
}