数据结构--线性表的实现
#define maxSize 50
#define BOOL int
#define True 1
#define False 0
#define ERRO -1
#include<stdio.h>
#include<string.h>
//定义一个学生的结构体类型,用于线性表的基本元素类型
typedef struct
{
int ID;
char *name;
int age;
}Student;
//定义一个线性表,基本数据类型为学生
typedef struct
{
Student *data;
int length;//线性表的当前长度
}SqList;
int main()
{
int i;
Student *sb;
Student student1={132,"Jack",20};
Student student2={132,"Mike",20};
SqList L;
InitList(&L);
printf("%d %d\n",&L.data,L.length);
ListInsert(&L,1,student1);
ListInsert(&L,1,student2);
ListInsert(&L,3,student2);
ListDelete(&L,1,&sb);
PrintList(L);
printf("ID:%d name:%s age:%d\n",(*sb).ID,(*sb).name,(*sb).age);
printf("%d",LocateElem(L,student1));
}
//初始化线性表
BOOL InitList(SqList *L)
{
L->length=0;
L->data=(Student *)malloc(maxSize * sizeof(Student));
return True;
}
//线性表中第i个位置插入元素
BOOL ListInsert(SqList *L,int i,Student e)
{
int j;
if(i<1||i>L->length+1)
return ERRO;
else if(L->length>maxSize+1)
return ERRO;
else
{
for(j=L->length;j>i-1;j--)
{
L->data[j]=L->data[j-1];
}
L->data[i-1]=e;
L->length++;
return True;
}
}
//删除线性表中的第i个元素
BOOL ListDelete(SqList *L,int i,Student **e)
{
// printf("sb");
int j=0;
int length=L->length;
if(i<1||i>length)
return ERRO;
else
{
*e=&(L->data[i-1]);
//printf("sb");
//printf("ID:%d name:%s age:%d\n",(*e).ID,(*e).name,(*e).age);
for(j=i-1;j<length-1;j++)
{
L->data[j]=L->data[j+1];
}
L->length--;
return True;
}
}
//按照值来查找
BOOL LocateElem(SqList *L,Student e)
{
int i;
for(i=0;i<L->length;i++)
if(isEqual(L->data[i],e))
return i+1;
return 0;
}
//按照位置来查找
BOOL getElem(SqList L,int i,Student **e)
{
if(i>0&&i<=L.length)
{
*e=&L.data[i-1];
return True;
}
else return False;
}
//判断线性表中的元素是否相等
BOOL isEqual(Student a,Student b)
{
if(a.age==b.age&&a.ID==b.ID&&a.name==b.name)
return True;
return False;
}
//打印线性表中的元素
void PrintList(SqList L)
{
int i=0;
for(i=0;i<L.length;i++)
printf("ID:%d name:%s age:%d locate:%d\n",L.data[i].ID,L.data[i].name,L.data[i].age,i+1);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~