//线性表的顺序存储
#include<stdio.h>
#include<malloc.h>
//定义一个结构体
struct Arr
{
int* p;
int max;
int length;
};
//初始数组
void init_arr(struct Arr* arr, int max)
{
arr->p = (int*)malloc(sizeof(int) * max);
if (arr->p != NULL)
{
arr->length = 0;
arr->max = 6;
printf("%s\n", "success");
}
else
{
printf("error");
}
}
//显示数组中所包含的元素
void show(struct Arr* arr)
{
if (arr->length == 0 && arr->p != NULL)
{
printf("%s\n", "arr is empty");
}
else if (arr->length == 0 && arr->p == NULL)
{
printf("%s\n", "arr is destroried");
}
else
{
int i;
for (i = 0; i < arr->length; i++)
{
printf("%d:%d\n", i + 1, arr->p[i]);
}
}
}
//显示数组第num个元素的值
void get(struct Arr* arr, int num)
{
if (num <= 0 || num > arr->length)
{
printf("error");
}
else
{
printf("第%d个元素的值:%d\n", num, arr->p[num - 1]);
}
}
//查找num在不在数组中
void locate(struct Arr* arr, int num)
{
int i;
for (i = 0; i < arr->length; i++)
{
if (arr->p[i] == num)
{
printf("%d位于第%d\n", num, i + 1);
break;
}
}
if (i == arr->length)
{
printf("not found\n");
}
}
//在数组末尾添加一个元素
void add(struct Arr* arr, int num)
{
if (arr->max == arr->length)
{
printf("%s\n", "error");
}
else
{
arr->p[arr->length] = num;
arr->length++;
}
}
//在数组第position位置插入元素num
void insert(struct Arr* arr, int position, int num)
{
if (position <= 0 || position > arr->length + 1 || arr->length == arr->max)
{
printf("%s\n", "error");
}
else
{
int i;
for (i = arr->length; i > position - 1; i--)
{
arr->p[i] = arr->p[i - 1];
}
arr->p[position - 1] = num;
arr->length++;
}
}
//删除数组第num个元素
void del(struct Arr* arr, int num)
{
if (num <= 0 || num > arr->max)
{
printf("%s\n", "error");
}
else
{
if (num == arr->max)
{
arr->length--;
}
else
{
int i;
for (i = num - 1; i < arr->length; i++)
{
arr->p[i] = arr->p[i + 1];
}
arr->length--;
}
}
}
//销毁数组
void destrory(struct Arr* arr)
{
arr->p = NULL;
free(arr->p);
arr->length = 0;
arr->max = 0;
}
//清空数组
void empty(struct Arr* arr)
{
arr->length = 0;
}
void main()
{
struct Arr arr;
init_arr(&arr, 6);
}