int id;
char* name;
int age;
int eng;
//int avg; 平均值不用记录在每个人的信息中
struct person *p;
};
struct person* head = NULL;
int length; //链表的长度
int getAverage(struct person* root);
void nameSearch(struct person* root);
void engSearch(struct person* root);
void stuSearch(struct person* root);
void stuInsert();
int main() {
struct person
p1 = { 01,"xiaozhan",23,75 },
p2 = { 02,"wangyibo",22,79 },
p3 = { 03, "suoer",24,90 },
dummyHead; // 虚拟头节点
p1.p = p2;
p2.p = p3;
p3.p = NULL;
head = dummyHead; // head指针指向虚拟头节点
head-p = p1; // 方便插入新节点
struct person* pp;
pp = p1;
//int a = 0;
while (pp) {
printf("%02d,%s,%d,%d\n", pp-id, pp-name, pp-age, pp-eng);
pp = pp-p;
length++; // 记录链表长度
}
printf("%d\n", getAverage(p1));
nameSearch(p1);
engSearch(p1);
stuSearch(p1);
stuInsert();
return 0;
}
int getAverage(struct person* root) {
int sum = 0;
int number = 0;
while (root) {
sum += root-eng;
number++;
root = root-p;
}
return sum / number; // 也可用现成的length, sum/length
}
void nameSearch(struct person* root) {
char name[20];
printf("输入姓名:");
gets(name);
while (root != NULL) {
if (strcmp(root-name, name) == 0) {
printf("学号为%02d的学生: 姓名为%s, 年龄为%d, 英语成绩为%d\n", root-id, root-name, root-age, root-eng);
return;
}
root = root-p;
}
printf("未找到姓名为%s的学生\n", name);
}
void engSearch(struct person* root) {
int min;
int max;
printf("输入最小值:");
scanf("%d", min);
printf("输入最大值:");
scanf("%d", max);
int i;
for (i = 0; ilength; i++) { // 把3改为length可适配其他节点数的情况
if (root-eng = minroot-eng = max ) {
printf("姓名为%s的学生英语成绩在这个区间\n",root-name);
}
root = root-p;
}
}
void stuSearch(struct person* root) {
int num;
//root = root-p; // 若输入为虚拟头节点则需要移动到头节点,否则不需要
printf("需要查找的学生学号为:");
scanf("%d", num);
while (root != NULL) {
if (root-id == num) {
printf("学号为%02d的学生的信息如下:\n", num);
printf("%02d %s %d %d\n", root-id, root-name, root-age, root-eng);
return;
}
root = root-p;
}
if (root == NULL)
printf("无此记录!\n");
return;
}
void stuInsert() {
int num, i;
struct person* root, * q;
root = head;
printf("请输入你要插入位置:");
scanf("%d", num);
if (numlength) {
printf("找不到要插入的位置!\n");
return;
}
else {
printf("请输入你要插入的学生的学号、姓名、年龄、成绩信息:\n");
q = (struct person*)malloc(sizeof(struct person));
q-name = (char *)malloc(50 * sizeof(char)); // name为指针,还要开辟足够的空间来储存输入的字符串
scanf("%d %s %d %d", q-id, q-name, q-age, q-eng);
while (root != NULL) {
if (root-id == q-id) {
printf("该学号已经存在,无法插入!\n");
return;
}
root = root-p;
}
root = head;
for (i = 0; inum; i++)
root = root-p;
q-p = root-p; // q插入到root之后,root-p之前
root-p = q;
length++;
printf("插入成功!插入后的链表为:\n");
q = head-p;
while (q != NULL) {
printf("%02d,%s,%d,%d\n", q-id, q-name, q-age, q-eng);
q = q-p;
}
return;
}
}
运行结果如下:
- 将数据保存到文件中c语言 将数据保存到mongodb
- 罗布人村天气 mysql语言具有的功能
- redis编程语言 redis对应c语言
- redis一般和什么语言一起开发 和redis类似的编程
- mongodb采用什么语言 mongodb的设计采用什么
- c连接mysql数据库 c连接mysql报错
- mongodb底层数据结构 mongodb底层语言
- mysql删除表如果存在 在mysql删除表正确的
- mongodb用什么语言写的 mongodb开源吗
- mongodb是做什么的 mongodb是什么语言写的
