C语言实现顺序存储结构(数组)
#include <stdio. h>
#include <malloc.h>
#include <stdlib.h>
struct Array
{
int* pBase; //数组首元素地址
int length; //数组总长度
int cnt; //数组当前元素个数
};
//数组初始化
void init_arr(struct Array * pArr, int length)
{
pArr->pBase = (int*)malloc(sizeof(int) * length);
if (pArr->pBase == NULL)
{
printf("内存分配失败!\n");
exit(-1);
}
else
{
pArr->length = length;
pArr->cnt = 0;
}
}
//数组是否为空
int is_empty(struct Array *pArr)
{
if (pArr->cnt == 0)
{
return 0;
}
return -1;
}
//数组是否已满
int is_full(struct Array *pArr)
{
if (pArr->cnt == pArr->length)
{
printf("数组已满\n");
return 0;
}
return -1;
}
//数组追加
int append(struct Array *pArr, int e)
{
if ( is_full(pArr) == 0 )
{
return -1;
}
else
{
pArr->pBase[(pArr->cnt)++] = e;
}
}
//在pos之前插入元素e
int insert(struct Array *pArr, int pos, int e)
{
int i;
if ( is_full(pArr) == 0 )
{
return -1;
}
if (pos < 1 || pos > pArr->cnt+1)
{
printf("位置错误,插入失败!\n");
return -1;
}
else
{
for (i=pArr->cnt-1; i>=pos-1; i--)
{
pArr->pBase[i + 1] = pArr->pBase[i];
}
pArr->pBase[pos - 1] = e;
pArr->cnt++;
}
}
//移除pos位置的元素
int remove_element(struct Array * pArr, int pos)
{
int i;
if (is_empty(pArr) == 0)
{
printf("数组为空,删除失败!\n");
return -1;
}
if (pos < 1 || pos > pArr->cnt)
{
printf("位置错误,删除失败!\n");
return -1;
}
for (i=pos; i<=pArr->cnt-1; i++)
{
pArr->pBase[i - 1] = pArr->pBase[i];
}
pArr->cnt--;
return 0;
}
//数组遍历
void traverse(struct Array* pArr)
{
int i;
for (i=0; i<pArr->cnt; i++)
{
printf("%d ", pArr->pBase[i]);
}
printf("\n");
}
//数组倒置
void inverse(struct Array *pArr)
{
int i=0, j=pArr->cnt-1, t;
while (i < j)
{
t = pArr->pBase[i];
pArr->pBase[i] = pArr->pBase[j];
pArr->pBase[j] = t;
i++;
j--;
}
}
int main()
{
struct Array array;
init_arr(&array, 5);
append(&array, 1);
append(&array, 2);
append(&array, 3);
append(&array, 4);
insert(&array, 5, 0);
traverse(&array);
remove_element(&array, 5);
traverse(&array);
return 0;
}