数据结构-线性结构-连续存储-静态链表(数组)
C语言实现:
头文件:
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
结构体构造类型:
typedef struct
{
int *base;//存储数组首地址
int len;//数组空间大小
int cnt;//数组中有效元素个数
}ARR;
功能接口:
- 初始化数组
void Init_arr(ARR *pa,int lenth)
{
pa->base=(int *)malloc(sizeof(int )*lenth);//申请堆内空间
assert(NULL!=pa->base);//验证申请成功与否
pa->len=lenth;//数组长度
pa->cnt=0;//初始化有效元素为0
}
- 判断数组是否为空
bool Is_empty(ARR *pa)
{
if(0==pa->cnt)//若数组有效元素个数为0,说明为空
return true;
else//否则不空
return false;
}
- 判断数组是否为满
bool Is_full(ARR *pa)
{
if(pa->len==pa->cnt)//若有效元素个数等于空间大小,说明已满
return true;
else//否则不满
return false;
}
- 显示数组
void Show_arr(ARR *pa)
{
if(Is_empty(pa))
{
printf("Array is empty!\n");
return;
}
else
{
int i;
for(i=0;i<pa->len;++i)
{
printf("%d ",(pa->base)[i]);
}
putchar(10);
}
return ;
}
- 追加元素
int Append(ARR *pa,int value)
{
if(Is_full(pa))
{
printf("Array is full!\n");
return 0;
}
else
{
pa->base[pa->cnt]=value;
(pa->cnt)++;
}
return 0;
}
- 插入元素
int Insert_arr(ARR *pa,int pos,int value)//插入位置从1开始
{
assert(pos>0);//验证插入位置pos的合法性
if(Is_full(pa))//验证是否为满
{
printf("Array is full!\n");
return 0;
}
else
{
//从第pos个元素到第pa->cnt个元素全部往后移动一个单位,
//因此,当pos>pa->cnt时,循坏不执行。
for(int i=pa->cnt-1;i>=pos-1;--i)
{
(pa->base)[i+1]=(pa->base)[i];
}
(pa->base)[pos-1]=value;
}
return 0;
}
- 删除元素
int Delete_arr(ARR *pa,int pos)
{
assert(pos>0&&pos<=pa->cnt);
if(Is_empty(pa))
{
printf("Array is empty!\n");
return 0;
}
else
{
for(int i=pos;i<pa->cnt;++i)
{
pa->base[i-1]=pa->base[i];
}
pa->cnt--;
}
return 0;
}
- 逆置
int Inverse(ARR *pa)
{
for(int i=0;i<pa->cnt/2;++i)
{
int temp=(pa->base)[i];
(pa->base)[i]=(pa->base)[pa->cnt-i-1];
(pa->base)[pa->cnt-i-1]=temp;
}
return 0;
}

本文介绍使用C语言实现静态链表的方法,包括初始化、判断空满状态、显示、追加、插入、删除元素及逆置操作。适用于初学者了解线性结构及数组应用。
1192

被折叠的 条评论
为什么被折叠?



