数据结构之数组(第一天)

数据结构之数组

数组是一种线性结构,主要包括数组长度,首地址,当前的有效个数和自动的增加因素。

下面给出自己抄郝斌老师的一段代码,很有用。

#include<stdio.h>
#include<stdlib.h>//包含exit(-1)函数 
#include<malloc.h>
#include<stdbool.h>//我的编译器的问题,不然就不可以使用bool值 

//1.typedef是给struct arr起别名,方便书写2.这是一个c语言的结构体 
typedef struct Arr{ 
    //数组首地址
    int*pbase;  
    //数组长度
    int len; 
    //数组有效个数
    int cnt; 
}d;

//下面是数组要实现的功能,一起声明 
//初始化
void init(struct Arr *arr,int length); 
//追加元素
bool append(struct Arr* arr,int val);
//展示数组
void show(d* arr);
//删除数组
void delete_arr(d*arr,int pos);
//判断为空
bool is_empty(d* arr);
//判断为满
bool is_full(d* arr);
//得到具体值
int get(d*arr,int pos);
//插入值
bool insert(d*arr,int pos,int val);
//倒置 
bool inverse(d*arr);


 main(void){
    //相当于struct Arr arr 
    d arr;
    //函数的参数是指针,故实参必须取地址 
    init(&arr,7);//这些函数主要看后面的定义 
    append(&arr,1);
    append(&arr,2);
    append(&arr,3);
    insert(&arr,1,5);
    inverse(&arr);
    inverse(&arr);  
    show(&arr);
}

//初始化数组,参数提供了数组的长度 
void init(struct Arr *arr,int length){
    //动态分配内存,arr->pbase的写法相当于*arr.pbase 
    arr->pbase = (int*)malloc(sizeof(int)*length);
    if(NULL == arr->pbase){
        printf("内存分配失败");
        //终止程序的办法,在#include <stdlib.h>中 
        exit(-1); 
    }
    //arr->len这种写法是为了调用全局变量 
    else{
        arr->len = length;
        arr->cnt = 0;
    } 
} 


bool is_empty(d* arr){
    if(arr->cnt== 0)
    return true;    
    else
    return false;
}


void show(d* arr){
    if(is_empty(arr)){
        printf("没有数组元素\n"); 
    }
    else{
        int i = 0;
        for(i;i<arr->cnt;i++){
            printf("%d\t",arr->pbase[i]);
        }
    }
}


bool append(struct Arr* arr,int val){
    if(is_full(arr)){
        printf("已装满,追加失败");
        return false;
    }
    else{
        arr->pbase[arr->cnt]=val;
        (arr->cnt)++;
        return true;
    } 
}


bool is_full(d* arr){
    if(arr->cnt == arr->len)
    return true;
    else
    return false;
}

//在POS位置插入val值 
bool insert(d*arr,int pos,int val){
    if(is_full(arr)){
        printf("数组已满");
        return false;
    }
    if(pos<0||pos>(arr->cnt))
    return false;
    else
    {
        int i = arr->cnt;
        for(i;i>=pos;i--){
            arr->pbase[i] = arr->pbase[i-1];
        }
        arr->pbase[pos-1] = val;
        return true;
    }
}


int get(d*arr,int pos){
    return arr->pbase[pos-1];
}


void delete_arr(d*arr,int pos){
    int i= pos;
    for(i;i<(arr->cnt);i++){
        arr->pbase[i-1]= arr->pbase[i];
    }
    (arr->cnt)--;
    
    
}

//倒转数组 
bool inverse(d*arr){
    if(is_empty(arr))
    return false;
    else
{   int i=0;
    int j;
    for(i;i<=(arr->cnt)/2;i++){
        j=arr->pbase[i];
        arr->pbase[i]=arr->pbase[(arr->cnt)-1-i];
        arr->pbase[(arr->cnt)-1-i]=j;
    }
    return true;} 
}

猜你喜欢

转载自www.cnblogs.com/xiaolongdejia/p/11161550.html