大黑鱼 发表于 2014-4-24 21:32:00

按着hb讲的打了个数组

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

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


};
voidinit_arr(struct Arr * parr, int length);
boolappend_arr(struct Arr * parr,int val);   // 追加
boolinsert_arr(struct Arr * parr, int pos,int val);
booldelete_arr(struct Arr * parr, int pos,int *pval);
//int   get();
boolis_empty(struct Arr * parr);
boolis_full(struct Arr * parr);
voidsort_arr(struct Arr * parr);
voidshow_arr(struct Arr * parr);
voidinversion_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); // parr指向的数组中的pbase指向的数组的内容的
            printf("\n");
    }
      
      


}

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

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


boolinsert_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 = parr->pbase;
    }
    parr->pbase = val;
   
    return true;

}

booldelete_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;
    for (i=pos;i < (parr->cnt); i++)
    {
      parr->pbase = parr->pbase;
    }
    parr->cnt --;
    return true;
}

voidinversion_arr(struct Arr * parr)   //数组的倒置
{
    int i=0;
    int j=parr->cnt-1;
    int t;

    while (i<j)
    {
      t=parr->pbase;
      parr->pbase = parr->pbase;
      parr->pbase = t;
      ++i;
      --j;

    }
    return ;

}

voidsort_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 > parr->pbase)
            { t=parr->pbase;
                parr->pbase = parr->pbase;
                parr->pbase = t;
            }
      }
   
   
    }



}{:2_25:}
页: [1]
查看完整版本: 按着hb讲的打了个数组