创建连续储存数组

/*
2017年6月16日 08:45:55
数据结构(c)
创建连续储存数组
功能:  初始化 追加 插入 删除 排序 是否空 是否满
*/
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct Arr SA;
void init (SA *arr, int len);
void show (SA *arr);
bool is_empty (SA *arr);
bool append(SA *arr,int a);
bool is_full(SA *arr);
bool insert (SA *arr, int a, int pos);
bool dele (SA *arr, int pos, int * del);
void inversion (SA *arr);
void sort_arr (SA *arr);
bool find_arr (SA *arr, int a);
struct Arr
{
 int len;
 int * pBase;
 int cnt;
};


int main (void)
{
 int del;
 SA arr;
 init(&arr, 5);
 show(&arr);
 append(&arr, 8);
 append(&arr, 2);
 append(&arr, 6);
 append(&arr, 4);
 printf ("追加:\n");
 show(&arr);
 sort_arr (&arr);
 printf ("排序:\n");
 show(&arr);

 insert (&arr, -1, 4);
 printf ("插入:\n");
 show(&arr);
 
 inversion(&arr);
 printf ("daozhi:\n");
 show(&arr);
 
 dele(&arr, 3, &del);
 printf ("删除:\n");
 show(&arr);
 inversion(&arr);
 printf ("daozhi:\n");
 show(&arr);
 sort_arr (&arr);
 printf ("排序:\n");
 show(&arr);

 
 return 0;
}
void init (SA *arr, int len)//初始化数组
{
 arr->pBase = (int *)malloc (sizeof(SA) * len);
 if (NULL == arr -> pBase)
 {
  printf ("分配失败\n");
  exit(-1);
 }
 else
 {
  arr->cnt = 0;
  arr->len = len;
 }
 return;
}
void show (SA * arr)//输出数组
{
 if (is_empty (arr))
 {
  printf ("数组为空\n");
 }
 
 else
 {
  for (int i = 0; i < arr->cnt ; ++i)
   printf ("%d  ",(arr->pBase )[i]);
  printf ("\n");
 }
}
bool is_empty (SA *arr)//判断数组是否为空
{
 if (0 == arr->cnt )
  return true;
 else
  return false;
}
bool is_full(SA *arr)//判断数组是否满了
{
 if (arr->cnt == arr->len )
  return true;
 else
  return false;
}
bool append(SA *arr, int a)//追加数组元素
{
 if (is_full(arr))
  return false;
 else
 {
  arr->pBase [arr ->cnt ] = a;
  ++ (arr->cnt) ;
  ++ (arr->len) ;
  return true;
 }
}
bool insert (SA *arr, int a, int pos)//插入数组元素
{
 if (pos <1 || is_full(arr) ||pos > arr->cnt  + 1)
  return false;
 for (int i = 0; i < (arr->cnt - pos + 2 ); ++i)
 {
  arr->pBase [arr->cnt - i] = arr->pBase [arr->cnt - 1 - i]; 
 }
 arr->pBase [pos - 1] = a;
 ++ (arr->cnt) ;
 ++ (arr->len) ;
 return true;
}
bool dele (SA *arr, int pos, int *del)//删除数组元素
{
 int i;
 if (pos <1 ||pos > arr->cnt || is_empty (arr))
  return false;
 *del = arr->pBase [pos - 1];
 for (i = pos; i < arr->cnt ;i++ )
 {
  arr->pBase [i - 1] = arr->pBase [i];
 }
 arr->cnt --;
 arr->len --;
 return true;
}
void inversion (SA *arr)//daozhi数组元素
{
 int t;
 
 for (int i = 0; i < (int)(arr->cnt/2) ;i++ )
 {
  t = arr->pBase [arr->cnt -1 - i];
  arr->pBase [arr->cnt - 1 - i ] = arr ->pBase [i];
  arr->pBase [i] = t;
 }
 return;
}
void sort_arr (SA *arr)//升序排序
{
 int t;
 int j, i;
 
 for (i = 0; i < arr->cnt ;i++)
 {
  for (j = i + 1; j < arr->cnt ; j++)
  {
  
   if (arr->pBase [i] > arr->pBase [j])
   {
    t = arr->pBase [i];
    arr->pBase [i] = arr->pBase [j];
    arr->pBase [j] = t;
   }
  }
 }
 return;
}
                          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值