#include<stdio.h>
#include<iostream.h>
#include<string.h>
#include<malloc.h>
#define StringSize 10
//学生数据类型
typedef struct
{
char name[StringSize];
float score;
}STD;
//顺序表数据类型
typedef struct
{
STD *data;
int ListSize; //数组容量
int length; //实际存放的元素个数
}SqList;
void initSqList(SqList *l,int max)
{
l->data=(STD *)malloc(sizeof(STD)*max);
l->length=0;
l->ListSize=max;
}
//i:插入元素的位置,x:插入的数据元素,返回值为0:表示失败,返回值为1:表示成功
int insert(SqList *l,int i,STD x)
{
if(i < 1 || i > l->ListSize+1)
{
printf("插入位置异常!\n");
return 0;
}
if(l->length = l->ListSize)
{
printf("元素已满!\n");
return 0;
}
for(int k=l->length;k>=i;k--)//将数据元素(从要插入位置的元素起到最后一个元素)向后移动
{
l->data[k]=l->data[k-1];
}
l->length+=1; //插入后元素个数加一
return 1;
}
//i:要删除的元素的位置,*x将要删除的保存其中
int deleteSqList(SqList *l,int i,STD *x)
{
if(i < 1 || i > l->length)
{
printf("删除位置有误!\n");
return 0;
}
*x=l->data[i-1]; //将要删除的数据元素存放在*x中
for(int k=i;k<=l->length;k++) //将数据向前移动(将所删除位置之后的所有元素)
{
l->data[k-1]=l->data[k];
}
l->length-=1;
return 1;
}
//i要更新的元素的位置,x:新数据
//数据个数发生改变用SqList *l,不改变用SqList l
int updataSqlist(SqList l,int i,STD x)
{
if(l.length == 0)
{
printf("没有元素,无法更新!\n");
return 0;
}
if(i < 1 || i > l.length)
{
printf("更新元素输入位置有误!\n");
return 0;
}
l.data[i-1]=x;
return 1;
}
//i:要获取的元素的位置
STD * getSqList(SqList l,int i,STD *x)
{
if(l.length == 0)
{
printf("没有元素,无法获取!\n");
return 0;
}
if(i < 1 || i > l.length)
{
printf("输入位置有误!\n");
return 0;
}
*x=l.data[i-1];
return x;
}
//char *x存放要查询的姓名 ,如果查询的到返回元素所在的位置
int locateSqList(SqList l,char *x)
{
if(l.length == 0)
{
printf("没有元素!\n");
return 0;
}
for(int k=0;k<l.length;k++)
{
if(strcmp(l.data[k].name,x) == 0)
return k+1;
}
return 0;
}
int dispSqList(SqList l)
{
int i;
if(l.length == 0)
{
printf("没有元素!\n");
return 0;
}
for(i=0;i<l.length;++i)
{
printf("%s,%f\n",l.data[i].name,l.data[i].score);
}
return 1;
}
int main()
{
SqList s;
initSqList(&s,3);
dispSqList(s);
return 0;
}
线性表
最新推荐文章于 2021-05-24 21:09:36 发布