数组复习

来源:互联网 发布:宁波seo教程 编辑:程序博客网 时间:2024/05/18 15:56
#include<stdio.h>#include<stdlib.h>//包含了exit函数#include<malloc.h>//包含了malloc函数//定义了一个数据类型,该数据类型叫做struct Arr,它有三个成员struct Arr{    int *pBase;//存储的是数组第一个元素的地址    int len;//数组长度    int cnt;//数组有效长度};void init_arr(struct Arr * , int length);bool append_arr( struct Arr *, int val);bool insert_arr( struct Arr *, int pos, int val);//pos的值从1开始,代表要插入的位置,val表示插入的值bool delete_arr(struct Arr *, int pos, int *pval);//删除pos位置的值int get( );bool is_empty( struct Arr *);bool is_full( struct Arr *);void sort_arr( struct Arr *);void show_arr(struct Arr *);void inversion_arr( struct Arr *);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,8);    append_arr(&arr,6);    append_arr(&arr,5);//  insert_arr( &arr,7,99);    append_arr(&arr,15);    /*    if(delete_arr(&arr,2, &val))    {        printf("删除成功!\n");        printf("您删除的元素是%d \n",val);    }    else    {        printf("删除失败!\n");    }    */    /*append_arr(&arr,7);    if(append_arr(&arr,8))    {        printf("追加成功!\n");    }    else    {        printf("追加失败!\n");    }    */    show_arr(&arr);    printf("倒置数据:\n");    inversion_arr( &arr);    show_arr(&arr);    printf("排序数据:\n");    sort_arr(&arr);    show_arr(&arr);    return 0;}void init_arr(struct Arr *pArr,int length)//array是形式参数{    pArr->pBase=(int *)malloc(sizeof(int)*length);//pArr指针变量所指向的结构体变量中的pBase成员    if(NULL==pArr->pBase)    {        printf("动态内存分配失败!\n");        exit(-1);    }    else    {        pArr->len=length;        pArr->cnt=0;    }    return;}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))//pArr本身存放的就是结构体变量的地址    {        printf("数组为空!\n");    }    else    {        for(int i=0;i<pArr->cnt;++i)            printf("%d ",pArr->pBase[i]);        printf("\n");    }}bool is_full(struct Arr* pArr){    if(pArr->cnt==pArr->len)        return true;    else        return false;}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)//在pos的前面插入val{    if(is_full(pArr))        return false;    if(pos<1||pos>pArr->cnt+1)        return false;    for(int 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)//返回删除的元素,通过形式参数pval修改主函数的值,主函数中需要返回删除的元素的值{    if(is_empty(pArr))        return false;    if(pos<1||pos>pArr->cnt)        return false;    *pval=pArr->pBase[pos-1];    for(int 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;    }}void sort_arr( struct Arr * pArr){    for(int i=0;i<pArr->cnt;i++)    {        for(int j=i+1;j<pArr->cnt;j++)        {            if(pArr->pBase[i]>pArr->pBase[j])            {                int t=pArr->pBase[i];                pArr->pBase[i]=pArr->pBase[j];                pArr->pBase[j]=t;            }        }    }}
0 0