数据结构之数组实现

来源:互联网 发布:伦敦南岸大学知乎 编辑:程序博客网 时间:2024/06/06 10:47
//模拟数组#include<stdio.h>#include<malloc.h>#include<stdlib.h>//定义了一个数据类型,该数据类型的名字叫struct ,3个成员struct Arr{    int * pBase;//存储的是数组的第一个的地址    int len;//数组所能容纳最大元素的个数    int cnt;//当前数组有效元素的个数//    int increment;//自动增长银因子};void init_arr(struct Arr * pArr, int length);bool append_arr(struct Arr * pArr, int val);//追加bool insert_arr(struct Arr * pArr, int pos, int val);bool delete_arr(struct Arr * pArr, int pos, int * pVal);int get();bool is_empty(struct Arr *);bool if_full(struct Arr *);void sort_arr(struct Arr * pArr);void show_arr(struct Arr *);void inversion_arr(struct Arr * pArr);int main(){    struct Arr arr;    int val;    init_arr(&arr, 6);    show_arr(&arr);    append_arr(&arr, 1);    append_arr(&arr, 2);    append_arr(&arr, 3);    append_arr(&arr, 4);    if( delete_arr(&arr, 5, &val) )        printf("您删除的元素是%d删除成功!\n",val);    else        printf("删除失败!\n");//    append_arr(&arr, 2);//    append_arr(&arr, 3);//    append_arr(&arr, 4);//    append_arr(&arr, 5);//    append_arr(&arr, 6);//    insert_arr(&arr,5,99);//    show_arr(&arr);//    insert_arr(&arr,1,66);    show_arr(&arr);    inversion_arr(&arr);    printf("倒置之后是:\n");    show_arr(&arr);    sort_arr(&arr);    show_arr(&arr);//    printf("%d\n", arr.len);    return 0;}void init_arr(struct Arr * pArr, int length){    pArr->pBase = (int *)malloc(sizeof(int) * length);    if(NULL == pArr->pBase)    {        printf("动态内存分配失败!\n");        exit(-1);//终止整个程序    }    else    {        pArr->len = length;        pArr->cnt = 0;    }    return;}bool is_full(struct Arr * pArr){    if(pArr->cnt == pArr->len)        return true;    else        return false;}bool is_empty(struct Arr * pArr){    if(0 == pArr->cnt)        return true;    else        return false;}void show_arr(struct Arr * pArr){    if(is_empty(pArr))    {        printf("数组为空!\n");    }    else    {        for(int i=0; i<pArr->cnt; ++i)            printf("%d ",pArr->pBase[i]);        printf("\n");    }}bool append_arr(struct Arr * pArr, int val){    //满时返回false    if( is_full(pArr) )        return false;    //不满时追加    pArr->pBase[pArr->cnt] = val;    (pArr->cnt)++;    return true;}bool insert_arr(struct Arr * pArr, int pos, int val){    int i;    if( is_full(pArr) ) return false;    if(pos<1 || pos>pArr->cnt+1) return false;    for(i=pArr->cnt-1; i>=pos-1; --i)    {        pArr->pBase[i+1] = pArr->pBase[i];    }    pArr->pBase[pos-1] = val;    pArr->cnt++;    return true;}bool delete_arr(struct Arr * pArr, int pos, int * pVal){    int i;    if( is_empty(pArr) )        return false;    if(pos<1 || pos>pArr->cnt)        return false;    *pVal = pArr->pBase[pos-1];    for(i=pos; i<pArr->cnt; ++i)    {        pArr->pBase[i-1] = pArr->pBase[i];    }    pArr->cnt--;    return true;}void inversion_arr(struct Arr * pArr){    int i = 0;    int j = pArr->cnt-1;    int t;    while(i < j)    {        t = pArr->pBase[i];        pArr->pBase[i] = pArr->pBase[j];        pArr->pBase[j] = t;        ++i;        --j;    }    return;}void sort_arr(struct Arr * pArr){    int i, j, t;    for(i=0; i<pArr->cnt; ++i)    {        for(j=i+1; j<pArr->cnt; ++j)        {            if(pArr->pBase[i] > pArr->pBase[j])            {                t = pArr->pBase[i];                pArr->pBase[i] = pArr->pBase[j];                pArr->pBase[j] = t;            }        }    }}

0 0
原创粉丝点击