上面这段代码有一个很大的问题,就是修改学号之后无法保证数组的有序性。
“修改”还要考虑修改的内容是否是学号,如果修改了学号,则应该编写程序保证不能破坏链表“有序性”的这个特点。
下面是修改后的
#include <stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#include<stdbool.h>
#define NO_LENGTH 20
#define NAME_LENGTH 11
/*定义学生结构体的数据结构*/
typedef struct Student {
char studentNo[NO_LENGTH];
char studentName[NAME_LENGTH];
} st;
/*定义每条记录或节点的数据结构*/
typedef struct node {
st data; //数据域
struct node *next; //指针域
} Node, *Link;
//功能菜单
void myMenu(void);
//输入学生信息
void inputStudent(Link l);
//输入学号
void inputStudentNo(char s[], char no[]);
//新增学生记录
bool addNode(Link head);
//删除学生记录
bool deleteNode(Link head);
//打印链表
void displayNode(Link head);
//查询学生记录
bool queryNode(Link head);
//修改学生记录
bool modifyNode(Link head);
//统计学生人数
int countNode(Link head);
//清除链表
void clearLink(Link head);
int main(void) {
int select; //功能选项代码
int count; //学生人数
//链表头
Link head;
head = (Link) malloc(sizeof(Node));
head->next = NULL;
while (1) {
myMenu();
printf("\n请输入你的选择(1-7):");
scanf("%d", &select);
switch (select) {
case 1:
if (addNode(head)) {
printf("成功增加一个学生记录。\n");;
}
break;
case 2:
if (deleteNode(head)) {
printf("成功删除一个学生记录。\n");
} else {
printf("没有找到要删除的学生记录。\n");
}
break;
case 3: