- 首页 > it技术 > >
#include
#include
//定义了一个数据类型叫struct Arr该数据类型包含 3个成员
struct Arr{//12个字节
int *pBase;
//存储数组第一个元素的地址
int len;
//数组所能容纳的最大元素个数
int cnt;
//当前数组有效元素的个数
};
//不用指针 用值得话 导致方法里存在局部变量 不能使主方法的改变只能传地址
void Init_arr(struct Arr *p,int length){ //传参哪个变量 长度
p->pBase=(int *)malloc(sizeof(int)*length);
//4*6=24个字节 表示p指向pBase这个成员变量(分配内存)第一块第一个字节地址赋给pBase
if(NULL==p->pBase){//地址满了就会把NULL赋给pBase
printf("动态内存分配失败");
exit(-1);
//终止程序
}
else{
p->len=length;
//赋值长度
p->cnt=0;
//还未赋值
}
return ;
}bool is_empty(struct Arr *p){//判断是否为空
if(0==p->cnt){//有效个数为空
printf("有效个数为空!");
return true;
}
else
return false;
}void show_arr(struct Arr *p){//输出内容
if(is_empty(p)){ //p已经存放arr的地址//调用是否为空为true执行下一条语句
printf("数组为空!\n");
}
else{
for(int i=0;
icnt;
i++)
printf("%d\t",p->pBase[i]);
printf("\n");
}
}bool is_full(struct Arr *p){//判断是否满
if(p->cnt==p->len){
printf("已满!");
return true;
}
else
return false;
}bool append_arr(struct Arr *p,int x){//添加数值
//判断是否满
if(is_full(p))
return false;
//不满时加值
p->pBase[p->cnt]=x;
//p->pBase[0]=1;
cnt=1
(p->cnt)++;
//p->pBase[1]=2;
cnt=2
return true;
//p->pBase[2]=3;
cnt=3//cnt为元素个数
//p->pBase[p->cnt]=x;
cnt的值为新放元素下标
}//(p->cnt)++;
元素个数加一bool insert_arr(struct Arr *p,int pos,int x){//在位置pos前面插入(pos从1开始)插入元素x后面的元素后移
int i;
if(is_full(p))
return false;
if(pos<1||pos>p->cnt+1){
printf("插入位置不合法!");
return false;
}
for(i=p->cnt-1;
i>=pos-1;
i--){
p->pBase[i+1]=p->pBase[i];
//后移
}
p->pBase[pos-1]=x;
p->cnt++;
return true;
}int main(){
int n,pos,x,L,t;
struct Arr arr;
//struct Arr 相当于数据类型只定义了是垃圾数字需要初始化
printf("输入数组长度:");
scanf("%d",&L);
Init_arr(&arr,L);
//初始化传地址 &arr=strcut Arr *pprintf("你要输入几个值:");
scanf("%d",&t);
printf("请输入:");
for(int i=0;
i
文章图片
【线性存储结构--数组】转载于:https://www.cnblogs.com/lizhenye/p/10834751.html
推荐阅读