顺序表(数组)

一、什么是数组 

数组是相同类型数据的有序集合. 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成

二、数组的特点

1.数组只能存储同一种数据类型的数据
2.一旦初始化,长度固定
3.数组中的元素与元素之间的内存地址是连续的

 三、数组的代码

(1)输入元素

void input(int arr[] , int len){
    //定义循环变量
    int i ;
    
    int *p = arr;
    
    for(i = 0 ; i<len ; i++){
        printf("请输入第%d个元素:",i+1);
        scanf("%d",&arr[i]);
        //scanf("%d",arr[i]);
        //scanf("%d",p + i);
    }
}

(2) 输出元素(遍历数组)

void output(int arr[] , int len){
    //定义循环变量
    int i;
    
    int *p = arr;
    
    for(i=0 ; i<len ; i++){
        printf("%d " , arr[i]);
        //printf("%d ",*(arr+i));
        //printf("%d ",*(p+i));
    }
}

(3)查询元素

//根据元素的值 去找
int searchValue(int arr[] , int len , int value){
    int i;
    
    for(i=0;i<len;i++){
        if(value == arr[i]){
            return i;
        }
    }
    return -1;
}
//根据下标 查找元素
int searchKey(int arr[] , int len , int key){
    //判断位置是否在数组范围之内
    if(key < 0 || key > len - 1){
        printf("位置不对!");
        return;								//exit(0);	结束程序
    }
    printf("查找的元素是:%d\n",arr[key]);
}

(4)动态生成 数组

int * getArray(int num){			//返回一个指针变量
    
    int i,*p,num;						// p 指向 动态数组首地址
    
    printf("请输入你要生成的数组长度是:\n");
    scanf("%d",&num);
    
    p = (int *)malloc(sizeof(int)*num);
    
    if(p == NULL){
        printf("空间申请失败!");
        return 0;
    }
    
    return p;
}

(5)修改元素

//根据元素值修改
void updateValue(int arr[] , int len , int value){
    
    //修改前 修改后
    int firstValue , lastValue , i;
    
    printf("请输入你要修改的元素:\n",&firstValue);
    scanf("%d",&firstValue);
    
    printf("请输入你要修改后的元素:\n",&firstValue);
    scanf("%d",&firstValue);
    
    for(i = 0;i<len ;i++){
        if(arr[i] == forstValue){
            arr[i] = lastValue;
        }
    }
}
//根据位置修改
void updatekey(int arr[] , int len ){
    int key , value;
    
    printf("请输入你要修改的位置:\n");
    scanf("%d",&key);
    
    printf("请输入你要修改后的位置:\n");
    scanf("%d",&value);
    
    if(key < 0 || key > len-1){
        printf("位置不对!");
        return 0;
    }
}

(6)插入元素

void insert(int arr[] , int len , int index , int value){
    
    int i;
    
    if(index < 0 || index > len-1){
        return ;
    }
    
    //元素后移
    for(i = *len-1 ; i >= index ; i--){
        arr[i+1] = arr[i];
    }
    
    //插入元素
    arr[index] = value;
    
    //长度变化
    (*len)++;
}*

(7)删除元素

void delete(int arr[] , int len , int index){
    
    int i;
    
    if(index < 0 || index > len-1){
        return ;
    }
    
    //元素前移
    for(i=index ; i<len-1 ; i++){
        arr[i] = arr[i+1];
    }
    
    //长度变化
    (*len)--;
}

(8)字符数组

//1.大括号初始化字符数组时,需要预留一个空间 做 结束标志\0,否则会乱码
char a[5] = {'a','b','c','d','e'};					//乱码

//2.当我们使用双引号初始化值,自带结束标志
char str[] = "hello";

注意:

strlen 求字符串长度时,不带\0

sizeof 求字符串长度时,带\0

(9)字符数组两种 键盘输入方式

1.gets(字符串);

2. scanf("%s",字符串);
//可以校验 是否越界,stdin 是标准输入流(键盘输入)
fgets(a,sizeof(a),stdin);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值