数据结构C语言实现之顺序表
线性表
线性表包含链表与顺序表
顺序表
定义:用一组地址连续的存储单元依此存储线性表的数据元素
特点:逻辑上相邻的数据元素,其物理次序也是相邻的
存储结构(C语言实现):
定义顺序表
为顺序表分配一个预定义大小的数组空间,并将线性表的当前长度设为“0”
#define SQLMAXSIZE 100; //定义顺序表最大长度
typedef struct{
int data[SQLMAXSIZE]; //分配预定义数组空间
int length;
}SqList
void InitList(SqList *l) //将线性表当前长度设为0
{
l->length = 0;
}
建立顺序表
建立的顺序表其实也就是写一块函数满足顺序表的定义的函数,即传入一组数据并写入顺序表中,n代表传入数据个数
int CreatList(SeqList *l, int a[], int n) {
if (n > MAXSIZE)
{
printf("空间不够,无法建立顺序表。\n");
return 0;
}
for (int k = 0; k < n; k++)
{
l->data[k] = a[k];
}
l->length = n;
return 1;
}
判断顺序表是否为空
int Empty(SeqList *l) //为空传1,非空传0
{
if (l->length == 0)
return 1;
else
return 0;
}
求顺序表表长
int Length(SeqList *l)
{
return l->length;
}
遍历顺序表中元素并打印出来
void PrintList(SeqList *l)
{
for (int i = 0; i < l->length; i++)
printf("%d ", (l->data[i]));
}
按照表中值进行查找
int Locate(SeqList *l,int x)
{
for (int i = 0; i < l->length; i++)
{
if (l->data[i] == x)
{
return i + 1;
}
}
return printf("\n列表中无参数\n");
}
按表中位置进行查找
int Get(SeqList *l, int x,int *ptr)
{
if ( x <1 || x>l->length){ //检测是否超出表长
printf("查找位置非法,查找错误\n");
return 0;
}
else
{
*ptr = l->data[x]; //从表中取出第X位数据
return 1;
}
}
向表中插入数据
int Insert(SeqList *l, int i, int x)
{
if (l->length > MAXSIZE)
{
printf("超出表空间!");
return 0;
}
if (i<1 || i>l->length)
{
printf("插入位置非法!");
return 0;
}
for (int k = l->length; k > i; k--) //将i位及以后数据后移,为插入元素准备空间
{
l->data[k] = l->data[k - 1];
}
l->data[i] = x; //i位元素写入
l->length++;
return 1;
}
按位删除数据,并返回删除数据值
int Delete(SeqList *l, int i, int *ptr)
{
if (l->length == 0)
{
printf("顺序表为空\n");
return 0;
}
if (i > l->length || i < 1)
{
printf("删除位置错误!\n");
return 0;
}
*ptr = l->data[i - 1]; //把要删除的数据返回
for (int j = i; j < l->length; j++)
{
l->data[j - 1] = l->data[j]; //将i右边数据左移一位,直接覆盖掉原始i位数据
}
l->length--;
return 1;
}
按位修改操作
int Modify(SeqList *l, int i, int x)
{
if (i > l->length || i < 1)
{
printf("插入位置错误!\n");
return 0;
}
l->data[i] = x; //会直接改变i位置值
return 1;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了