线性表结构体:
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("动态内存分配失败!程序终止!\n");
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("顺序表已满,追加失败!\n");
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\n",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("元素插入位置无效!插入失败!\n");
return 0;
}
if ( Is_Array_Full(parr) )
{
printf("顺序表已满,插入失败!\n");
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("元素位置不存在,删除失败!\n");
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文件

1 #include "Array.h"
2
3 int Is_Array_Full(pAr parr) // 判断数组是否为满
4 {
5 if (parr->max == parr->len)
6 return 1;
7 else
8 return 0;
9 }
10
11 int Is_Array_Empty(pAr parr)// 判断数组是否为空
12 {
13 if (0 == parr->len)
14 return 1;
15 else
16 return 0;
17 }
18
19 pAr CreatArray(int num) //初始化一个Array
20 {
21 pAr parr = (pAr)malloc(sizeof(Ar));
22
23 if (NULL == parr)
24 {
25 printf("动态内存分配失败!程序终止!\n");
26 exit(-1);
27 }
28 parr->pBase = (int *)malloc(sizeof(int)*num);
29 if (NULL == parr->pBase)
30 {
31 printf("动态内存分配失败!程序终止!n");
32 exit(-1);
33 }
34 parr->len = 0; // 置初始化长度为0
35 parr->max = num; // 置最大长度为num
36 return parr;
37 }
38
39 int Append_Val(pAr parr, int val) // 在数组的末尾追加元素
40 {
41 // 数组满了不能追加
42 if (Is_Array_Full(parr))
43 {
44 printf("顺序表已满,追加失败!\n");
45 return 0;
46 }
47 // 将数据val写入末尾位置,并刷新当前数组长度
48 parr->pBase[parr->len] = val;
49 parr->len++;
50 return 1;
51 }
52
53 void Sort_Array(pAr parr) // 数组的排序
54 {
55 // 使用冒泡排序算法
56 int temp;
57 for (int i=0; i<parr->len; i++)
58 for (int j=0; j<parr->len; j++)
59 if (parr->pBase[i] > parr->pBase[j])
60 {
61 temp = parr->pBase[i];
62 parr->pBase[i] = parr->pBase[j];
63 parr->pBase[j] = temp;
64 }
65 return;
66 }
67
68 void Show_Array(pAr parr) // 展现一个数组
69 {
70 for (int i=0; i<parr->len; i++)
71 printf("Array[%d] = %d\n",i+1,parr->pBase[i]);
72 return;
73 }
74
75 int Insert_Array_pre(pAr parr, int length, int val)// 某一个位置之前插入
76 {
77 int i;
78 if (length<0 || length>parr->len)
79 {
80 printf("元素插入位置无效!插入失败!\n");
81 return 0;
82 }
83 if ( Is_Array_Full(parr) )
84 {
85 printf("顺序表已满,插入失败!\n");
86 return 0;
87 } else
88 parr->len++;
89 for (i=parr->len-1; i>length-1; i--)
90 parr->pBase[i] = parr->pBase[i-1];
91 parr->pBase[i] = val;
92 return 1;
93 }
94
95 int Delete_Val(pAr parr, int * length, int val)// 删除某一元素,并且将第一次出现的位置下标发送给主函数
96 {
97 int i, flag=0;
98
99 for (i=0; i<parr->len; i++)
100 {
101 if (val == parr->pBase[i] && 0 == flag)
102 {
103 *length = i+1; // 记录val第一次出现的位置
104 flag = 1;
105 }
106 if (1 == flag)
107 {
108 parr->pBase[i] = parr->pBase[i+1];
109 }
110 }
111 if (1 == flag)
112 {
113 parr->len --;
114 return 1;
115 } else
116 return 0;
117 }
118 int Delete_Len(pAr parr, int length, int * val) // 删除固定位置,并且将删除的元素发送给主函数
119 {
120 int i;
121 if (length<0 || length>parr->len)
122 {
123 printf("元素位置不存在,删除失败!\n");
124 return 0;
125 }
126 *val = parr->pBase[length-1];
127 for (i=length-1; i<parr->len; i++)
128 {
129 parr->pBase[i] = parr->pBase[i+1];
130 }
131 parr->len--;
132 return 1;
133 }
简单测试示例:
//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
