/*
2017年6月16日 08:45:55
数据结构(c)
创建连续储存数组
2017年6月16日 08:45:55
数据结构(c)
创建连续储存数组
功能: 初始化 追加 插入 删除 排序 是否空 是否满
*/
*/
#include <stdio.h>
#include <malloc.h>
#include <stdlib.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);
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 len;
int * pBase;
int cnt;
};
int main (void)
{
int del;
{
int del;
SA arr;
init(&arr, 5);
show(&arr);
init(&arr, 5);
show(&arr);
append(&arr, 8);
append(&arr, 2);
append(&arr, 6);
append(&arr, 4);
printf ("追加:\n");
show(&arr);
append(&arr, 2);
append(&arr, 6);
append(&arr, 4);
printf ("追加:\n");
show(&arr);
sort_arr (&arr);
printf ("排序:\n");
show(&arr);
printf ("排序:\n");
show(&arr);
insert (&arr, -1, 4);
printf ("插入:\n");
show(&arr);
inversion(&arr);
printf ("daozhi:\n");
show(&arr);
printf ("daozhi:\n");
show(&arr);
dele(&arr, 3, &del);
printf ("删除:\n");
show(&arr);
printf ("删除:\n");
show(&arr);
inversion(&arr);
printf ("daozhi:\n");
show(&arr);
printf ("daozhi:\n");
show(&arr);
sort_arr (&arr);
printf ("排序:\n");
show(&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;
}
{
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");
}
}
{
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;
}
{
if (0 == arr->cnt )
return true;
else
return false;
}
bool is_full(SA *arr)//判断数组是否满了
{
if (arr->cnt == arr->len )
return true;
else
return false;
{
if (arr->cnt == arr->len )
return true;
else
return false;
}
bool append(SA *arr, int a)//追加数组元素
{
if (is_full(arr))
return false;
{
if (is_full(arr))
return false;
else
{
arr->pBase [arr ->cnt ] = a;
++ (arr->cnt) ;
++ (arr->len) ;
return true;
}
}
{
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];
{
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) ;
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;
}
{
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;
{
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;
}
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;
}