实验:线性表的操作(顺序表)C语言

实验:线性表的操作(顺序表)C语言要求 1 假如有一个学生表 每个学生包含学号 姓名和分数 你如何设计相应的顺序表 2 如果对学生表进行插入 修改和删除运算 你如何设计相应的算法 include stdio h include malloc h include lt malloc h stdio h

大家好,我是讯享网,很高兴认识大家。

要求:

  (1)假如有一个学生表,每个学生包含学号、姓名和分数。你如何设计相应的顺序表?

(2)如果对学生表进行插入、修改和删除运算,你如何设计相应的算法?

 

 

#include<stdio.h> #include<malloc.h> #include<stdlib.h> #define MaxSize 10 struct Students//定义学生信息的结构体 { char name[20];//姓名 long num;//学号 int score;//分数 }; typedef Students ElemType; typedef struct//定义学生链表 { ElemType data[MaxSize]; int length; }SqList; void CreateList(SqList*&L, ElemType a[], int n)//创建显示信息链表 { int i = 0, k = 0; L = (SqList *)malloc(sizeof(SqList)); while (i < n) { L->data[i] = a[i]; i++; k++; } L->length = k; } int ListLength(SqList *L)//链表长度 { return(L->length); } void DispList(SqList*&L)//输出链表的各个元素 { printf("┏━━━━━━━━━━━──━━━━━━━━━──━─━━━━━━━┓\n"); printf("┠───────────学生信息表────────────┨\n"); for (int i = 0; i < L->length; i++) { printf("┃ %-7ld", L->data[i].num); printf("%-15s", L->data[i].name); printf("%3d ┃\n", L->data[i].score); printf("\n"); } printf("┗━━━━━━━━━━━━━━━━━──━━━━━──━─━━━━━┛\n"); } bool ListInsert(SqList*&L, int i, ElemType &e)//插入新元素 { int j; if (i < 1 || i> L->length + 1) return false; i--;//逻辑序号转换成物理序号 for (j = L->length; j > i; j--) L->data[j] = L->data[j - 1]; L->data[i] = e; L->length++; return true; } bool ListDelete(SqList*&L, int i, ElemType &e)//删除指定序号的元素 { int j; if (i < 1 || i> L->length) return false; i--; e = L->data[i]; for (j = i; j < L->length; j++) L->data[j] = L->data[j + 1]; L->length--; return true; } int LocateElem(SqList*&L, long nm)//根据学号获得对应结点的序号 { int i = 0; while (i < L->length && L->data[i].num != nm) i++; if (i >= L->length) return 0; else return i++; } void showElem(Students &Stu) { printf("%-7ld", Stu.num); printf("%-15s", Stu.name); printf("%d\n", Stu.score); } void RectifyElem(SqList*&L, int n)//修改对应学号的学生的信息 { printf("新学号:"); scanf("%d", &L->data[n].num); printf("新姓名:"); char Eat; scanf("%c", &Eat); int m; char ch; for (scanf("%c", &ch), m = 0; m < 20 && ch != '\n'; m++) { L->data[n].name[m] = ch; scanf("%c", &ch); } L->data[n].name[m] = '\0'; printf("\n"); printf("新成绩:"); scanf("%d", &L->data[n].score); } int main() { Students Stu[5] = { { "Li", 1001, 79 }, { "xiao", 1002, 78 }, { "wanng", 1003, 81 } ,{"ke",1004,99},{"hua",1005,96 } }; SqList *L; Students a; int n,m,k; Students Stud2; long number; printf("*\n"); printf(" 1.创建顺序表\n"); printf(" 2.输出元素\n"); printf(" 3.插入学生信息\n"); printf(" 4.删除学生信息\n"); printf(" 5.修改学生信息\n"); printf(" 0.退出系统\n"); printf("*\n"); n = -1; while (n != 0) { printf("请选择功能:\n"); scanf("%d", &n); switch (n) { case 1: //创建顺序表 CreateList(L, Stu, 5); printf("创建成功!\n"); break; case 2: //输出个元素 DispList(L); break; case 3: //插入元素 printf("\n输入插入的位置:"); scanf("%d", &m); printf("输入插入学生的姓名\n"); scanf("%s", a.name); printf("输入插入学生的学号\n"); scanf("%ld", &a.num); printf("输入插入学生的成绩\n"); scanf("%d", &a.score); ListInsert(L, m, a); printf("依次输出新的排列:\n"); break; case 4: //删除元素 printf("\n\n输入删学生的信息序号:\n"); scanf("%d", &m); ListDelete(L, m, Stud2); DispList(L); printf("\n\n被删去的学生的信息为:\n"); showElem(Stud2); break; case 5: //修改元素 printf("请输入修改学生信息的学号:"); scanf("%ld", &number); printf("\n"); k = LocateElem(L, number); printf("修改学生的信息如下:\n"); showElem(L->data[k]); RectifyElem(L, k); printf("输出修改后的学生的信息\n"); DispList(L); break; case 0:exit(0); //退出系统 } } }

讯享网


讯享网

有错请指正!

小讯
上一篇 2025-03-29 20:32
下一篇 2025-02-21 09:47

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/69651.html