#include<stdio.h> #include<stdlib.h> //定义了一个数据类型叫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;i<p->cnt;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 *p printf("你要输入几个值:"); scanf("%d",&t); printf("请输入:"); for(int i=0;i<t;i++){ scanf("%d",&n); append_arr(&arr,n); } printf("输出结果为:"); show_arr(&arr); printf("请输入在什么位置:"); scanf("%d",&pos); printf("插入:"); scanf("%d",&x); insert_arr(&arr,pos,x); printf("插入后结果:"); show_arr(&arr); }
线性存储结构--数组
原文地址:https://www.cnblogs.com/lizhenye/p/10834751.html
时间: 2024-10-10 21:11:58