顺序结构:
顺序表,数组都属于顺序结构。
顺序表结构体:
typedef int T;
typedef struct sqlist{
T data[N];//存放需要存储的数据
int last;//记录数据个数
}sqlist_t,*sqlink_t;
C语言实现
- 初始化顺序表
sqlink_t init_sqlist()
{
sqlink_t sq = (sqlink_t)malloc(sizeof(sqlist_t));
if(sq!=NULL)
{
//初始化数据个数为0
sq->last = 0;
}
return sq;
}
- 插入数据
//从指定位置插入
void insert_by_index(sqlink_t sq,T dt,int index)
{
int i = 0;
if(sq)
{
//如果插入的位置非法,不插入
if(index<0||index>sq->last)
{
printf("out of range!\n");
}
else if(sq->last>=N)
{
printf("sq is full!\n");
}
else
{
//将插入位置之后的数据后移,从后往前操作
for(i=sq->last;i>index;i--)
sq->data[i] = sq->data[i-1];
//将dt插入index位置
sq->data[index] = dt;
//个数+1
sq->last++;
}
}
else
{
printf("sq is null!\n");
}
}
//从顺序表的尾部插入
void insert_at_tail(sqlink_t sq,T dt)
{
if(sq)
{
sq->data[sq->last++] = dt;
}
else
printf("sq is null!\n");
}
- 删除数据
//从指定位置删除
void delete_by_index(sqlink_t sq,int index)
{
int i = 0;
if(sq)
{
//如果删除位置非法,不删除
if(index<0||index>=sq->last)
{
printf("out of range!\n");
}
else
{
//将删除位置之后的数据前移,从前往后操作
for(i=index;i<sq->last-1;i++)
sq->data[i] = sq->data[i+1];
//个数-1
sq->last--;
}
}
else
{
printf("sq is null!\n");
}
}
//从顺序表的尾部删除数据
void delete_at_tail(sqlink_t sq)
{
if(sq)
sq->last--;
else
printf("sq is null!\n");
}
- 查找数据
//按位置查找
T search_by_index(sqlink_t sq,int index)
{
if(sq)
{
if(index<0||index>=sq->last)
return -ENOINDEX;
else
return sq->data[index];
}
else
{
printf("sq is null!\n");
return -ENULL;
}
}
//按值查找(只返回找到的第一个)
int search_by_value(sqlink_t sq,T dt)
{
int i = 0;
if(sq)
{
for(i=0;i<sq->last;i++)
{
if(sq->data[i]==dt)
return i;
}
return -ENOMEM;
}
else
{
printf("sq is null!\n");
return -ENULL;
}
}
- 修改数据
//按位置修改
void modify_by_index(sqlink_t sq,int index,T dt)
{
if(sq)
{
if(index<0||index>=sq->last)
printf("out of range!\n");
else
sq->data[index] = dt;
}
else
printf("sq is null!\n");
}
//按值修改(将所有匹配的值修改)
void modify_by_value(sqlink_t sq,T old_dt,T new_dt)
{
int i = 0;
if(sq)
{
for(i=0;i<sq->last;i++)
{
if(sq->data[i]==old_dt)
sq->data[i] = new_dt;
}
}
else
printf("sq is null!\n");
}
- 遍历
void travel(sqlink_t sq)
{
int i = 0;
for(i=0;i<sq->last;i++)
printf("%d ",sq->data[i]);//将顺序表打印
printf("\n");
}
- 销毁
void destroy_sqlist(sqlink_t *psq)
{
free(*psq);
*psq = NULL;
}