zoukankan      html  css  js  c++  java
  • 数组插入,删除,增加,排序等程序

    #include<stdio.h>
    #include<malloc.h>
    #include<stdlib.h>
    typedef struct Arr
    {
        int * pBase;//保存数组第一个元素的地址
        int len;//数组的长度
        int cnt;//数组的有效个数
    }Array;
    typedef int bool;
    #define true 0
    #define false 1
    void init_arr(Array *);//数组初始化
    void show_arr(Array *);//输出
    bool is_empty(Array *);//判断是否为空
    bool is_full(Array *);//判断是否为满
    bool append_arr(Array *, int);//追加数组
    bool insert_arr(Array *, int, int);//插入数组
    bool delete_arr(Array *, int);
    void sort(Array *, int, int);//数组快排
    void sort2(Array *);//数组冒泡排序
    void invision(Array *);//数组倒置
    int main(void)
    {
        Array arr;
        printf("请输入数组的长度:");
        scanf("%d",&arr.len);
        printf("
    ");
        init_arr(&arr);
        show_arr(&arr);
    
        append_arr(&arr,49);
        append_arr(&arr,38);
        append_arr(&arr,76);
        append_arr(&arr,54);
        append_arr(&arr,97);
        append_arr(&arr,20);
        append_arr(&arr,19);
        append_arr(&arr,66);
        printf("------------------------------------追加数组------------------------------------
    ");
        printf("
    ");
        show_arr(&arr);
        printf("
    ");
        printf("------------------------------------插入数组------------------------------------
    ");
        printf("
    ");
        insert_arr(&arr,2,88);
        insert_arr(&arr,3,99);
        show_arr(&arr);
        printf("------------------------------------快速排序------------------------------------
    ");
        printf("
    ");
        sort(&arr,0,arr.cnt-1);
        show_arr(&arr);
        printf("------------------------------------冒泡排序------------------------------------
    ");
        printf("
    ");
        sort2(&arr);
        show_arr(&arr);
        printf("------------------------------------倒置数组------------------------------------
    ");
        printf("
    ");
        invision(&arr);
        show_arr(&arr);
        printf("------------------------------------删除数组------------------------------------
    ");
        printf("
    ");
        delete_arr(&arr,3);
        show_arr(&arr);
        return 0;
    }
    void init_arr(Array * pArr)
    {
        pArr->pBase=(int *)malloc(sizeof(int)*pArr->len);
        if(pArr->pBase==NULL)
        {
            printf("内存分配失败!
    ");
            exit(-1);
        }
        else
            pArr->cnt=0;
        return;
    }
    bool is_empty(Array * pArr)
    {
        if(pArr->cnt==0)
            return true;
        else
            return false;
    }
    void show_arr(Array * pArr)
    {
        int i;
        if( !is_empty(pArr) )
            printf("数组为空!
    ");
        else
        {
            for(i=0;i<pArr->cnt;++i)
                printf("%d	",pArr->pBase[i]);
        }
        printf("
    ");
            return;
    }
    bool is_full(Array * pArr)
    {
        if(pArr->cnt>pArr->len-1)
            return false;
        else
            return true;
    
    }
    bool append_arr(Array * pArr,int val)
    {
        //pArr->pBase[0]=23;cnt=1;
        //pArr->pBase[1]=46;cnt=2;
        if( !is_full(pArr) )
        {
            pArr->pBase[pArr->cnt]=val;
            ++pArr->cnt;
            //printf("cnt=%d
    ",pArr->cnt);
            return true;
        }
        else
        {
            printf("数组已满,其余的无法追加!
    ");
            return false;
        }
            
    }
    bool insert_arr(Array * pArr, int pos, int val)
    {
        int i;
        if( is_full(pArr) )
            return false;
        else
        {
            for(i=pArr->cnt-1;i>=pos-1;--i)//pos下标从1开始
            {
                pArr->pBase[i+1]=pArr->pBase[i];
            }
            pArr->pBase[pos-1]=val; 
            ++pArr->cnt;
            return true;
        }
    }
    //快速排序
    void sort(Array * pArr, int left, int right)
    {
        
        int i=left;
        int j=right;
        int key=pArr->pBase[left];
        if(left>=right)
            return;
        while(i<j)
        {
            while(i<j && pArr->pBase[j]>key)
                --j;
                //temp=key;
                //key=pArr->pBase[j];
                //pArr->pBase[j]=temp;
            pArr->pBase[i]=pArr->pBase[j];
    
            while(i<j && key>pArr->pBase[i] )
                ++i;
            pArr->pBase[j]=pArr->pBase[i];
    
        }
        pArr->pBase[i]=key;
        sort(pArr,left,i-1);
        sort(pArr,i+1,right);
    }
    //冒泡排序
    void sort2(Array * pArr)
    {
        int i,j,temp;
        for(i=0;i<pArr->cnt-1;++i)//i是排序多少次
        {
            for(j=0;j<pArr->cnt-i-1;++j)//j是用来前后排序的
            {
                if(pArr->pBase[j]>pArr->pBase[j+1])
                {
                    temp=pArr->pBase[j];
                    pArr->pBase[j]=pArr->pBase[j+1];
                    pArr->pBase[j+1]=temp;
                }
            }
        }
    }
    //倒置数组
    void invision(Array * pArr)
    {
        int i=0;
        int j=pArr->cnt-1;
        int temp;
        while(i<j)
        {
            temp=pArr->pBase[i];
            pArr->pBase[i]=pArr->pBase[j];
            pArr->pBase[j]=temp;
            ++i;
            --j;
        }
    }
    bool delete_arr(Array * pArr, int pos)//pos下标从1开始
    {
        int i;
        if(pos-1>=pArr->cnt)
            return false;
        for(i=pos-1;i<=pArr->cnt-1;++i)
            pArr->pBase[i]=pArr->pBase[i+1];
        --pArr->cnt;
        return true;
    }
  • 相关阅读:
    servlet 表单加上multipart/form-data后request.getParameter获取NULL(已解决)
    火狐浏览器通过配置文件锁定主页
    如何最快速的完成智慧树期末考试(有钱的大佬请绕道)记----智慧树考试生产力
    java代码发送邮箱验证码与qq邮箱smtp服务
    邮件服务器
    Android requestcode resultcode的作用
    伽卡拉他学生客户端无法运行任务管理器的解决方法
    Django自定义UserModel并实现认证和登录
    {%csrf_token%}的作用
    Producer Flow Control 和 vmQueueCursor
  • 原文地址:https://www.cnblogs.com/fengkui/p/6116262.html
Copyright © 2011-2022 走看看