线性表结构体:
typedef struct Array{ int len; // 记录数组内有效元素个数 int max; // 记录最大元素个数 int *pBase; }Ar, *pAr;
顺序表基本运算:
初始化一个Array
pAr CreatArray(int num) //初始化一个Array
{
pAr parr = (pAr)malloc(sizeof(Ar));
if (NULL == parr)
{
printf("动态内存分配失败!程序终止!
");
exit(-1);
}
parr->pBase = (int *)malloc(sizeof(int)*num);
if (NULL == parr->pBase)
{
printf("动态内存分配失败!程序终止!
");
exit(-1);
}
parr->len = 0; // 置初始化长度为0
parr->max = num; // 置最大长度为num
return parr;
}
在数组的末尾追加元素
int Append_Val(pAr parr, int val) // 在数组的末尾追加元素
{
// 数组满了不能追加
if (Is_Array_Full(parr))
{
printf("顺序表已满,追加失败!
");
return 0;
}
// 将数据val写入末尾位置,并刷新当前数组长度
parr->pBase[parr->len] = val;
parr->len++;
return 1;
}
数组的排序
void Sort_Array(pAr parr) // 数组的排序
{
// 使用冒泡排序算法
int temp;
for (int i=0; i<parr->len; i++)
for (int j=0; j<parr->len; j++)
if (parr->pBase[i] > parr->pBase[j])
{
temp = parr->pBase[i];
parr->pBase[i] = parr->pBase[j];
parr->pBase[j] = temp;
}
return;
}
遍历一个数组
void Show_Array(pAr parr) // 遍历一个数组
{
for (int i=0; i<parr->len; i++)
printf("Array[%d] = %d
",i+1,parr->pBase[i]);
return;
}
某一个位置之前插入
int Insert_Array_pre(pAr parr, int length, int val)// 某一个位置之前插入
{
int i;
if (length<0 || length>parr->len)
{
printf("元素插入位置无效!插入失败!
");
return 0;
}
if ( Is_Array_Full(parr) )
{
printf("顺序表已满,插入失败!
");
return 0;
} else
parr->len++;
for (i=parr->len-1; i>length-1; i--)
parr->pBase[i] = parr->pBase[i-1];
parr->pBase[i] = val;
return 1;
}
删除某一元素,并且将第一次出现的位置下标发送给主函数
int Delete_Val(pAr parr, int * length, int val)// 删除某一元素,并且将第一次出现的位置下标发送给主函数
{
int i, flag=0;
for (i=0; i<parr->len; i++)
{
if (val == parr->pBase[i] && 0 == flag)
{
*length = i+1; // 记录val第一次出现的位置
flag = 1;
}
if (1 == flag)
{
parr->pBase[i] = parr->pBase[i+1];
}
}
if (1 == flag)
{
parr->len --;
return 1;
} else
return 0;
}
删除固定位置,并且将删除的元素发送给主函数
int Delete_Len(pAr parr, int length, int * val) // 删除固定位置,并且将删除的元素发送给主函数
{
int i;
if (length<0 || length>parr->len)
{
printf("元素位置不存在,删除失败!
");
return 0;
}
*val = parr->pBase[length-1];
for (i=length-1; i<parr->len; i++)
{
parr->pBase[i] = parr->pBase[i+1];
}
parr->len--;
return 1;
}
判断数组是否为满
int Is_Array_Full(pAr parr) // 判断数组是否为满
{
if (parr->max == parr->len)
return 1;
else
return 0;
}
判断数组是否为空
int Is_Array_Empty(pAr parr)// 判断数组是否为空
{
if (0 == parr->len)
return 1;
else
return 0;
}
整体表示:
Array.h文件
1 // 创建一个顺序表 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 typedef struct Array{ 6 int len; // 记录数组内有效元素个数 7 int max; // 记录最大元素个数 8 int *pBase; 9 }Ar, *pAr; 10 11 pAr CreatArray(int num); //初始化一个Array 12 int Append_Val(pAr parr, int val); // 在数组的末尾追加元素 13 void Sort_Array(pAr parr); // 数组的排序 14 void Show_Array(pAr parr); // 展现一个数组 15 int Insert_Array_pre(pAr parr, int length, int val);// 某一个位置之前插入 16 int Delete_Val(pAr parr, int * length, int val);// 删除某一元素,并且将第一次出现的位置下标发送给主函数 17 int Delete_Len(pAr parr, int length, int * val);// 删除固定位置,并且将删除的元素发送给主函数 18 int Is_Array_Full(pAr parr); // 判断数组是否为满 19 int Is_Array_Empty(pAr parr);// 判断数组是否为空
Array.c文件
#include "Array.h"
int Is_Array_Full(pAr parr) // 判断数组是否为满
{
if (parr->max == parr->len)
return 1;
else
return 0;
}
int Is_Array_Empty(pAr parr)// 判断数组是否为空
{
if (0 == parr->len)
return 1;
else
return 0;
}
pAr CreatArray(int num) //初始化一个Array
{
pAr parr = (pAr)malloc(sizeof(Ar));
if (NULL == parr)
{
printf("动态内存分配失败!程序终止!
");
exit(-1);
}
parr->pBase = (int *)malloc(sizeof(int)*num);
if (NULL == parr->pBase)
{
printf("动态内存分配失败!程序终止!n");
exit(-1);
}
parr->len = 0; // 置初始化长度为0
parr->max = num; // 置最大长度为num
return parr;
}
int Append_Val(pAr parr, int val) // 在数组的末尾追加元素
{
// 数组满了不能追加
if (Is_Array_Full(parr))
{
printf("顺序表已满,追加失败!
");
return 0;
}
// 将数据val写入末尾位置,并刷新当前数组长度
parr->pBase[parr->len] = val;
parr->len++;
return 1;
}
void Sort_Array(pAr parr) // 数组的排序
{
// 使用冒泡排序算法
int temp;
for (int i=0; i<parr->len; i++)
for (int j=0; j<parr->len; j++)
if (parr->pBase[i] > parr->pBase[j])
{
temp = parr->pBase[i];
parr->pBase[i] = parr->pBase[j];
parr->pBase[j] = temp;
}
return;
}
void Show_Array(pAr parr) // 展现一个数组
{
for (int i=0; i<parr->len; i++)
printf("Array[%d] = %d
",i+1,parr->pBase[i]);
return;
}
int Insert_Array_pre(pAr parr, int length, int val)// 某一个位置之前插入
{
int i;
if (length<0 || length>parr->len)
{
printf("元素插入位置无效!插入失败!
");
return 0;
}
if ( Is_Array_Full(parr) )
{
printf("顺序表已满,插入失败!
");
return 0;
} else
parr->len++;
for (i=parr->len-1; i>length-1; i--)
parr->pBase[i] = parr->pBase[i-1];
parr->pBase[i] = val;
return 1;
}
int Delete_Val(pAr parr, int * length, int val)// 删除某一元素,并且将第一次出现的位置下标发送给主函数
{
int i, flag=0;
for (i=0; i<parr->len; i++)
{
if (val == parr->pBase[i] && 0 == flag)
{
*length = i+1; // 记录val第一次出现的位置
flag = 1;
}
if (1 == flag)
{
parr->pBase[i] = parr->pBase[i+1];
}
}
if (1 == flag)
{
parr->len --;
return 1;
} else
return 0;
}
int Delete_Len(pAr parr, int length, int * val) // 删除固定位置,并且将删除的元素发送给主函数
{
int i;
if (length<0 || length>parr->len)
{
printf("元素位置不存在,删除失败!
");
return 0;
}
*val = parr->pBase[length-1];
for (i=length-1; i<parr->len; i++)
{
parr->pBase[i] = parr->pBase[i+1];
}
parr->len--;
return 1;
}
简单测试示例:
//main.c
#include "Array.h"
int main() {
int length;
pAr parr = CreatArray(5);
Append_Val(parr,1);
printf("%d ",Delete_Val(parr,&length,1));
Show_Array(parr);
return 0;
}
RR