当前位置:首页 > 新闻中心 > 电气版块 > 详细内容
【C语言_小知识】动态数组,输入,输出,倒置,排序 练习
发布时间:2014/6/23  阅读次数:2097  字体大小: 【】 【】【
这个是看了郝斌老师的数据结构后,自己写的程序,看视频的时候感觉还好,但自己敲出来,还是会有很多问题,尽管现在可以实现:malloc创建数组,任意位置输入值,任意位置删除之,数组元素倒置,数组元素排序,后续再回来复习!

// 练习.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "malloc.h"
#include "stdlib.h"
struct Arr
{
        int * arradd;                //数组的首地址保存
        int        len;                        //创建数组的长度
        int cnt;                        //当前数组的有效长度
};

bool new_arrmalloc(struct Arr *pArr);        //创建动态数组
void show_arr_xinxi( struct Arr *pArr1);        //数组基本长度,有效值输出
bool input_arr(struct Arr * pAss2);                        //数组输入值
bool is_full(struct Arr * pArr2);                        //判断数组是否已满
bool is_empty(struct Arr * pArr2);                        //判断数组是否为空
void output_arr(struct Arr *pArr4);                        //数组输出
bool insert_arr(struct Arr *pArr5,int pos,int val);                //任意位置插入
bool delete_arr(struct Arr *pArr5,int pos);        //删除任意数据
void paiup_arr(struct Arr * pArr5);                        //排序,降序
void daozhi_arr(struct Arr * pArr6);
int main(void)
{
        
        struct Arr arr;                        //创建 结构体类型 arr;
        new_arrmalloc(&arr);        //创建数组
        show_arr_xinxi(&arr);        //数组基本信息输出
        is_empty(&arr);
        input_arr(&arr);                //数据输入1
        input_arr(&arr);                //数据输入2
        input_arr(&arr);                //数据输入3
        input_arr(&arr);                //数据输入4
        input_arr(&arr);                //数据输入5
        input_arr(&arr);                //数据输入6
        delete_arr(&arr,2);
        output_arr(&arr);
        insert_arr(&arr,1,1000);
        output_arr(&arr);
        paiup_arr(&arr);
        output_arr(&arr);
        daozhi_arr(&arr);
        output_arr(&arr);
//        is_full(&arr);
//        show_arr_xinxi(&arr);        //数组基本信息输出
        while(1);
        return 0;
}

/*******************创建数组******************************/
bool new_arrmalloc( struct Arr *pArr)                
{
        int len;
        printf_s("请输入你需要创建数组的个数:");
        scanf_s("%d",&len);
        pArr->arradd = (int *)malloc(sizeof(int)*len);
                if(NULL == pArr->arradd )                //当数组创建失败是pArr->arradd 为NULL
                {
                        printf_s("动态分配内存失败,程序终止\n");
                        exit(-1);                //程序异常退出 需要包含头文件#include"stdlib.h"
                }
                else
                {                   //创建成功,将数组属性写入,对应的成员
                        pArr->len = len;
                        pArr->cnt = 0;
                        printf_s("\n数组创建成功\n");
                }
                return true;                                //程序在这里终止
}
/********************输出数组基本信息***********************/
void show_arr_xinxi( struct Arr *pArr1)
{
        printf_s("\n数组信息:\n\t数组长度:%d\n\t有效值:\t %d\n",pArr1->len,pArr1->cnt );
}
/********************数组写值***********************/
bool input_arr(struct Arr * pAss2)
{
        int* Parr;
        int pos;
        int val;
        if(is_full(pAss2))
                return false;
        printf_s("\n请输入插入位置pos:范围(0<pos<=%d)\t",((pAss2->len)));
        scanf_s("%d",&pos);
        printf_s("请在%d输入插入的数值avl:",pos);
        scanf_s("%d",&val);
        if(0 < pos && pos<((pAss2->len)+1))
        {
                printf_s("数据输入正确\n");
                Parr = pAss2->arradd;
                Parr[(pos-1)] = val;
                pAss2->cnt++;
                return true;
        }        
        else
        {
                printf_s("\t输入参数有误,数据输入失败\n");
                return false;
        }

}
/********************判断数组是否满***********************/
bool is_full(struct Arr * pArr2)
{
        if(((pArr2->len) == (pArr2->cnt)))
        {
                printf_s("数组数据已满\n");
                return true;
        }
        else 
        {
        //        printf_s("剩余的储存空间为:%d\n",((pArr2->len) - (pArr2->cnt)));
                return false;
        }
}
/********************判断数组是为空***********************/
bool is_empty(struct Arr * pArr3)
{
        if(0 == (pArr3->cnt))
        {
                printf_s("数组为空\n");
                return true;
        }
        else
        {
                return false;
        }
}
/********************数组输出***********************/
void output_arr(struct Arr *pArr4)
{
        int i;
        for(i=0;i<pArr4->cnt;i++)
        {
                printf_s("\n%d",(pArr4->arradd));
        }
        printf_s("\n输出完成\n");
}

/********************任意位置插入***********************/
bool insert_arr(struct Arr *pArr5,int pos,int val)
{
        
        int len,cnt;
        int * arr_address;
        len = pArr5->len ;
        cnt = pArr5->cnt ;
        arr_address =  pArr5->arradd;
        if(is_full(pArr5))
        {
                printf_s("输入插入失败\n");
                return false;
        }
        else
        {
                
                for(;cnt>=pos;--cnt)
                {
                        arr_address[cnt] = arr_address[cnt-1];
                }

                arr_address[pos-1] = val;
                ++pArr5->cnt;
                return true;
        }
}
/********************任意位置删除***********************/
bool delete_arr(struct Arr *pArr5,int pos)
{
        
        int cnt;
        int * arr_address1;
        cnt = pArr5->cnt ;
        arr_address1 =  pArr5->arradd;
        if(pos > cnt)
        {
                printf_s("数据删除失败\n");
                return false;
        }
        else
        {
                
                for(;pos<cnt;++pos)
                {
                        arr_address1[pos-1] = arr_address1[pos];
                }
                --pArr5->cnt;
                return true;
        }
}
/******************** 降序排序***********************/
void paiup_arr(struct Arr * pArr5)
{
        int *i;
        int j,g,h,k;
        i= pArr5->arradd;
        k = pArr5->cnt;
        printf_s("降序排序\n");
        for(j=0;j<k;j++)
        {
                for(g=(j+1);g<k;g++)
                {
                        if(i[j]<i[g])
                        {
                                h=i[j];
                                i[j] = i[g];
                                i[g]=h;
                        }
                }
        }
}
/********************倒置***********************/
void daozhi_arr(struct Arr * pArr6)
{
        int * i;
        int j,k,h;
        i= pArr6->arradd;
        j=(pArr6->cnt-1);

        for(k=0;k<j;++k,--j)
        {
                h = i[k];
                i[k] = i[j];
                i[j] = h;
        }
}
我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[1]
    暂无已审核评论!


惠州市胜克机电设备有限公司 版权所有

 Copyright By www.hzskjd.com