线性存储结构--数组

#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);
}

 


 

posted @ 2019-05-08 21:23  李振业  阅读(328)  评论(0编辑  收藏  举报