##主程序,测试代码
#define _CRT_SECURE_NO_WARNINGS
#include "Array.h"
#include<stdio.h>
void fun1()
{
array *a1 = arr_init();
Type temp = 0;
int index = 0;
for (int i = 0; i < 10; i++)
{
arr_push(a1, temp + i);
}
arr_out(a1);
printf("\n");
/*arr_MaopaoSort(a1);*/
//arr_SelectSort(a1);
arr_InsertSort(a1);
arr_out(a1);
printf("\n");
/*temp = array_remove(a1, 5);
printf(P, temp);*/
/*array_insert(a1, 2, 10);
arr_out(a1);
printf("\n");
arr_pop(a1);
arr_out(a1);
printf("\n");
arr_pop(a1);
arr_out(a1);
printf("\n");*/
//arr_clear(a1);
//if (arr_empty(a1))
// printf("数据域为空\n");
//arr_out(a1);
//printf("\n");
//printf("输入十个数字:\n");
//for (int i = 0; i < 10; i++)
//{
// scanf(S, &temp);
// arr_push(a1, temp);
//}
//arr_out(a1);
//printf("\n");
//printf("输入你想要获取数据的位置:\n");
//scanf(S,&index);
//printf(P, array_get(a1, index));
}
int main()
{
fun1();
getchar();
return 0;
}
##顺序表功能定义
#pragma once
typedef int Type;
//typedef %d T;
#define P "%d\t"
#define S "%d"
typedef struct Array
{
Type *date;//顺序表的数据
Type lenth;//顺序表的长度(当前个数)
}array;
//初始化顺序表
array * arr_init();
//销毁数据表
void arr_free(array *arr);
//重置为空表
void arr_clear(array *arr);
//判断是否为空表
int arr_empty(array *arr);
//返回第i个元素的值
Type array_get(array *arr, int i);
//插入顺序表元素
void arr_push(array *arr, Type elem);
//在顺序表指定位置插入新的数据元素
void array_insert(array *arr, int index, Type elem);
//删除顺序表指定位置的数据元素,并返回元素的值
Type array_remove(array *arr, int index);
//输出顺序表
void arr_out(array *arr);
//从尾部删除顺序表
void arr_pop(array *arr);
//冒泡排序,从大到小
void arr_MaopaoSort(array *arr);
//选择排序,从大到小
void arr_SelectSort(array *arr);
//插入排序,从大到小
void arr_InsertSort(array *arr);
##顺序表功能实现
#include "Array.h"
#include<stdio.h>
#include<stdlib.h>
//初始化顺序表
array * arr_init()
{
array *temp = (array *)malloc(sizeof(array));//顺序表结构体初始化
if (NULL == temp)
{
printf("初始化列表失败");
return NULL;
}
temp->date = (Type *)calloc(1,sizeof(Type));
if (NULL == temp->date)
{
printf("初始化数据域失败");
}
temp->lenth = 0;
return temp;
}
//销毁数据表
void arr_free(array *arr)
{
if (arr != NULL)
{
if (arr->date != NULL)
{
free(arr->date);
free(arr);
}
}
else
{
printf("顺序表为空!\n");
}
}
//重置为空表
void arr_clear(array *arr)
{
if (NULL == arr)
{
printf("数据表为空\n");
return ;
}
//for (int i = 0; i < arr->lenth; i++)
//{
// arr->date[i] = 0;
//}
//arr->date = (Type *)realloc(arr->date, sizeof(Type));
if (NULL == arr->date)
{
printf("数据域为空\n");
return ;
}
free(arr->date);
arr->date = (Type *)calloc(1, sizeof(Type));
arr->lenth = 0;
}
//判断是否为空表
int arr_empty(array *arr)
{
if (arr->lenth == 0)
return 1;
return 0;
}
//返回第i个元素的值
Type array_get(array *arr, int i)
{
if (NULL == arr)
{
printf("顺序表为空\n");
return NULL;
}
if (NULL == arr->date)
{
printf("顺序表数据域为空\n");
return NULL;
}
if (arr_empty(arr))
{
printf("顺序表数据为空");
return NULL;
}
return arr->date[i - 1];
}
//尾部插入顺序表元素
void arr_push(array *arr, Type elem)
{
if (NULL == arr)
{
printf("顺序表为空\n");
return;
}
if (NULL == arr->date)
{
printf("顺序表数据域为空\n");
return;
}
arr->lenth++;
arr->date = (Type *)realloc(arr->date, sizeof(Type)*arr->lenth);
arr->date[arr->lenth - 1] = elem;
}
//在顺序表指定位置插入新的数据元素
void array_insert(array *arr, int index, Type elem)
{
if (NULL == arr)
{
printf("顺序表为空\n");
return ;
}
if (NULL == arr->date)
{
printf("顺序表数据域为空\n");
return ;
}
if (arr_empty(arr))
{
printf("顺序表数据为空");
return ;
}
arr->lenth++;
arr->date = (Type *)realloc(arr->date, sizeof(Type)*arr->lenth);
for (int i = arr->lenth - 1; i >= index; i--)
{
arr->date[i] = arr->date[i - 1];
}
arr->date[index-1] = elem;
}
//删除顺序表指定位置的数据元素,并返回元素的值
Type array_remove(array *arr, int index)
{
if (NULL == arr)
{
printf("顺序表为空\n");
return NULL;
}
if (NULL == arr->date)
{
printf("顺序表数据域为空\n");
return NULL;
}
if (arr_empty(arr))
{
printf("顺序表数据为空");
return NULL;
}
Type tmp=arr->date[index-1];
for (int i = index; i < arr->lenth; i++)
{
arr->date[i - 1] = arr->date[i];
}
arr->lenth--;
realloc(arr->date, sizeof(arr->lenth));
return tmp;
}
//输出顺序表
void arr_out(array *arr)
{
if (NULL == arr)
{
printf("数据表为空");
return;
}
if (NULL == arr->date)
{
printf("数据表为空");
return;
}
if (arr_empty(arr))
{
printf("顺序表数据为空");
return;
}
for (int i = 0; i < arr->lenth; i++)
{
printf(P, arr->date[i]);
}
}
//从尾部删除顺序表
void arr_pop(array *arr)
{
arr->date[arr->lenth - 1] = 0;
arr->lenth--;
realloc(arr->date, sizeof(Type)*arr->lenth);
}
//冒泡排序,从大到小
void arr_MaopaoSort(array *arr)
{
if (NULL == arr)
{
printf("顺序表为空\n");
return;
}
if (NULL == arr->date)
{
printf("顺序表数据域为空\n");
return;
}
if (arr_empty(arr))
{
printf("顺序表数据为空");
return;
}
int i, j;
Type temp;
for (i = 0; i < arr->lenth; i++)
{
for (j = 0; j < arr->lenth - 1-i; j++)
{
if (arr->date[j + 1] > arr->date[j])
{
temp = arr->date[j];
arr->date[j] = arr->date[j + 1];
arr->date[j + 1] = temp;
}
}
}
}
//选择排序,从大到小
void arr_SelectSort(array *arr)
{
if (NULL == arr)
{
printf("顺序表为空\n");
return;
}
if (NULL == arr->date)
{
printf("顺序表数据域为空\n");
return;
}
if (arr_empty(arr))
{
printf("顺序表数据为空");
return;
}
int i, j,max;
Type Max;
for (i = 0; i < arr->lenth; i++)
{
max = i;
for (j = i+1; j < arr->lenth; j++)
{
if (arr->date[max] < arr->date[j])
{
max = j;
}
}
Max = arr->date[max];
arr->date[max] = arr->date[i];
arr->date[i] = Max;
}
}
//插入排序,从大到小
void arr_InsertSort(array *arr)
{
if (NULL == arr)
{
printf("顺序表为空\n");
return;
}
if (NULL == arr->date)
{
printf("顺序表数据域为空\n");
return;
}
if (arr_empty(arr))
{
printf("顺序表数据为空");
return;
}
int i, j;
Type tmp; //记录要插入的数据
for (i = 1; i < arr->lenth; i++)
{
tmp = arr->date[i];
j = i - 1;
while (j >= 0 && tmp < arr->date[j])
{
arr->date[j] = arr->date[j + 1];
j--;
}
arr->date[j + 1] = tmp;
}
}