鱼C论坛

 找回密码
 立即注册
查看: 1514|回复: 0

[技术交流] 按着hb讲的打了个数组

[复制链接]
发表于 2014-4-24 21:32:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

struct Arr         //定义数据类型,数据类型名字叫 strcut arr
{
    int *pbase;    //存储的是数组第一个元素
    int len;         //数组的长度
    int cnt;        // 数组的实际长度


};
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 * parr);
bool  is_full(struct Arr * parr);
void  sort_arr(struct Arr * parr);
void  show_arr(struct Arr * parr);
void  inversion_arr(struct Arr * parr);




int main(void)
{
    int val;
    struct Arr arr;   //定义一个struct Arr  类型的元素   arr
    init_arr(&arr,6);
    //show_arr(&arr);
    append_arr(&arr,1);  //调用追加函数
    append_arr(&arr,12);
    append_arr(&arr,23);
    append_arr(&arr,9);
    append_arr(&arr,-1);
    append_arr(&arr,100);
    //insert_arr(&arr,4,9);
    //delete_arr (&arr,2,&val);
    if (delete_arr(&arr,2,&val))   //调用删除函数
    {
        printf("删除成功!\n");
        printf("您删除的元素是:%d\n",val);
    }
    else
    {
        printf("您删除失败!");
   
   
    }
    show_arr(&arr);
    inversion_arr(&arr);   //调用倒置函数
    printf("倒置之后的内容是:\n");
    show_arr(&arr);
    sort_arr(&arr);   // 调用排序函数
    show_arr(&arr);
    return 0;
}

void init_arr(struct Arr * parr, int length)   //初始化函数的定义
{
    parr->pbase = (int *)malloc( sizeof (int) * length) ;
    if (NULL == parr->pbase )   // 如果分配不成功,将NULL 赋给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) )
        printf("数组为空!");
    else
    {
        for (int i=0;i<parr->cnt;i++)
            printf("%d  ",parr->pbase[i]); // parr指向的数组中的pbase指向的数组的内容的
            printf("\n");
    }
      
      


}

bool  append_arr(struct Arr * parr,int val)   //追加函数的定义
{
    if (is_full(parr))   //满时返回FALSE
        return false;
    else
        parr->pbase[parr->cnt] = val;
        parr->cnt++;
        return true;
}

bool  is_full(struct Arr * parr)   //判断函数是否为满
{
    if (parr->cnt == parr->len)
        return true;
    else
        return false;
}


bool  insert_arr(struct Arr * parr, int pos,int val)   //POS的值从1开始,放在POS之前,插入一个数
{   
    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;
   
    return true;

}

bool  delete_arr(struct Arr * parr, int pos,int *pval)  // 删除一个数组中的值 ,POS是删除的第几个元素,返回的是删除的数值
{
    int i;

    if (is_empty(parr))
        return false;
    if (pos < 1 || pos > parr->len)
        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;
            }
        }
   
   
    }



}{:2_25:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 05:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表