郝斌数据结构(一):数组的模拟

来源:互联网 发布:类似灵魂摆渡的网络剧 编辑:程序博客网 时间:2024/05/10 19:56
#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;
}
}
}
}
0 0
原创粉丝点击