编写程序实现顺序表的建立、求长度、插入、删除、遍历的基本运算,其中顺序表中每一个数据元素的类型定义为学生信息的结构体,包括学号、姓名和成绩
时间: 2023-05-29 13:04:12 浏览: 97
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
typedef struct student {
int id; // 学号
char name[20]; // 姓名
int score; // 成绩
} Student;
typedef struct {
Student data[MAX_SIZE]; // 数据元素
int length; // 顺序表长度
} SeqList;
// 初始化顺序表
void InitList(SeqList *list) {
list->length = 0;
}
// 求顺序表长度
int GetLength(SeqList *list) {
return list->length;
}
// 在指定位置插入元素
int Insert(SeqList *list, int pos, Student stu) {
if (list->length >= MAX_SIZE) { // 判断顺序表是否已满
printf("顺序表已满,插入失败!\n");
return 0;
}
if (pos < 1 || pos > list->length + 1) { // 判断插入位置是否合法
printf("插入位置不合法,插入失败!\n");
return 0;
}
for (int i = list->length; i >= pos; i--) { // 从后往前依次将元素后移
list->data[i] = list->data[i - 1];
}
list->data[pos - 1] = stu; // 将新元素插入指定位置
list->length++; // 顺序表长度加1
printf("插入成功!\n");
return 1;
}
// 删除指定位置的元素
int Delete(SeqList *list, int pos) {
if (list->length == 0) { // 判断顺序表是否为空
printf("顺序表为空,删除失败!\n");
return 0;
}
if (pos < 1 || pos > list->length) { // 判断删除位置是否合法
printf("删除位置不合法,删除失败!\n");
return 0;
}
for (int i = pos - 1; i < list->length - 1; i++) { // 从前往后依次将元素前移
list->data[i] = list->data[i + 1];
}
list->length--; // 顺序表长度减1
printf("删除成功!\n");
return 1;
}
// 遍历顺序表
void Traverse(SeqList *list) {
if (list->length == 0) { // 判断顺序表是否为空
printf("顺序表为空!\n");
return;
}
printf("学号\t姓名\t成绩\n");
for (int i = 0; i < list->length; i++) {
printf("%d\t%s\t%d\n", list->data[i].id, list->data[i].name, list->data[i].score);
}
}
int main() {
SeqList list;
InitList(&list); // 初始化顺序表
while (1) {
printf("\n");
printf("1. 插入元素\n");
printf("2. 删除元素\n");
printf("3. 遍历顺序表\n");
printf("4. 求顺序表长度\n");
printf("0. 退出程序\n");
printf("\n");
int choice;
printf("请输入你的选择:");
scanf("%d", &choice);
switch (choice) {
case 0:
printf("程序已退出!\n");
exit(0);
case 1: {
Student stu;
printf("请输入要插入的学生信息(学号 姓名 成绩):");
scanf("%d %s %d", &stu.id, stu.name, &stu.score);
Insert(&list, list.length + 1, stu); // 在末尾插入元素
break;
}
case 2: {
int pos;
printf("请输入要删除的元素位置:");
scanf("%d", &pos);
Delete(&list, pos);
break;
}
case 3:
Traverse(&list);
break;
case 4:
printf("顺序表长度为:%d\n", GetLength(&list));
break;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}