今天博主呢来分享一下前周的数据结构作业,是一道用顺序表来实现学生信息管理的作业。
大家不要小看这道题,博主在做的时候也是频繁踩坑(也许是博主菜呢,hhh)。
今天分享出来主要就是给需要的同学或路过的同学看看。
下面是解题代码(纯手工打的):
#include
#include
#include
#include
#define maxsize1 20
typedef char Elemtype;
typedef struct
{
int num;
char name[maxsize1];
char sex[maxsize1];
int score;
}Type;
typedef struct
{
Type data[maxsize1];
int length;
}SqList;
int initlist(SqList*& L)
{
L = (SqList*)malloc(sizeof(SqList));
//L->data = (Type*)malloc(sizeof(Type));
L->length = 0;
return 0;
}
bool insertdata(SqList*& L, Type e, int i)
{
if (L->length == maxsize1)
{
return false;
}
else if (i<1 || i>L->length)
{
return false;
}
else
{
int j;
i--;
for (j = L->length; j > i; j--)
{
L->data[j] = L->data[j - 1];
}
L->data[i] = e;
L->length++;
return true;
}
}
int deletedata(SqList*& L, int n)
{
if (n<1 || n >L->length)
{
return false;
}
int i = 0;
for (i = n + 1; i < L->length ; i++)
{
L->data[i - 1] = L->data[i];
}
L->length--;
printf("成功删掉第%d个元素\n", n);
return true;
}
int getlength(SqList*& L)
{
printf("当前长度为%d\n", L->length);
return 0;
}
void ifempty(SqList*& L)
{
if (L->length == 0)
{
printf("顺序表为空\n");
}
else
{
printf("顺序表不为空\n");
}
}
void finddata(SqList*& L, int n)
{
if (n<0 || n>L->length)
{
printf("输入位置有误\n");
}
else
{
printf("第%d个元素的学号为%d\n", n, L->data[n].num);
printf("第%d个元素的姓名为%3s\n", n, L->data[n].name);
printf("第%d个元素的性别为%3s\n", n, L->data[n].sex);
printf("第%d个元素的成绩为%d\n", n, L->data[n].score);
}
}
void printlist(SqList*& L)
{
if (L->length == 0)
{
printf("该顺序表的长度为空\n");
}
int j;
printf("表中数据为\n");
for (j = 0; j < L->length; j++)
{
printf("第%d个元素的学号为%d\n", j, L->data[j].num);
printf("第%d个元素的姓名为%3s\n", j, L->data[j].name);
printf("第%d个元素的性别为%3s\n", j, L->data[j].sex);
printf("第%d个元素的成绩为%d\n", j, L->data[j].score);
}
}
void locatedata(SqList*& L, int n)
{
int j ;
for (j = 0; j < L->length; j++)
{
if (L->data[j].num == n)
{
printf("位置在%d", j );
}
else
{
break;
}
}
}
void destroylist(SqList*& L)
{
free(L);
printf("释放成功\n");
}
void input(SqList*& L, int n)
{
printf("请输入学号\n");
scanf_s("%d", &L->data[n - 1].num, 250);
printf("请输入姓名\n");
scanf_s("%s", &L->data[n - 1].name, 250);
printf("请输入性别\n");
scanf_s("%s", &L->data[n - 1].sex, 250);
printf("请输入成绩\n");
scanf_s("%d", &L->data[n - 1].score, 250);
L->length++;
}
int main()
{
SqList* L;
printf("欢迎大家来到学生信息管理系统\n");
initlist(L);
printf("请输入初始化数据\n");
/*for (int i = 1; i < 3; i++)
{
input(L, i);
}
for (int j = 0; j < 2; j++)
{
insertdata(L, L->data[j], j+1);
}*/
insertdata(L, L->data[0], 1);
insertdata(L, L->data[1], 2);
input(L, 1);
input(L, 2);
printf("功能如下:\n");
printf("1.打印信息\n");
printf("2.获取当前顺序表长度\n");
printf("3.判断顺序表是否为空\n");
printf("4.找某位同学的信息\n");
printf("5.根据学号找同学位置\n");
printf("6.删除某位同学的信息\n");
printf("7.销毁顺序表\n");
int choice;
while (true)
{
scanf_s("%d", &choice, 250);
switch (choice)
{
case 1:
printlist(L);
break;
case 2:
getlength(L);
break;
case 3:
ifempty(L);
break;
case 4:
int i;
printf("想要找哪位同学的信息\n");
scanf_s("%d", &i, 250);
finddata(L, i);
break;
case 5:
int j;
printf("想要找的同学的学号为\n");
scanf_s("%d", &j, 250);
locatedata(L, j);
break;
case 6:
int k;
printf("想要删除哪位同学的信息\n");
scanf_s("%d", &k, 250);
deletedata(L, k);
break;
case 7:
destroylist(L);
break;
default:
break;
}
}
return 0;
}
程序执行图:(可能有点瑕疵,大家去看看程序的逻辑就会知道)
本贴为博主亲手整理。
如有错误,请评论区指出,一起进步。
谢谢大家的浏览.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)