C程序设计 (第四版) 谭浩强 习题9.12 个人设计
习题 9.12 建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。
代码块:
#include <stdio.h>
#include <stdlib.h>
struct Student{
int num;
char name[20];
char sex;
int age;
Student *next;
};
void input(Student *stu, int n);
void print(Student *stu);
Student *del(Student *stu, int n);
int main()
{
Student s[3];
input(s, 3);
int m;
printf("Please enter age: ");
scanf("%d", &m);
print(del(s, m));
system("pause");
return 0;
}
void input(Student *stu, int n)
{
Student *p;
int i;
for (p=stu, i=0; p<stu+n; p++, i++){
printf("Please enter No.%d student info: ", i+1);
scanf("%d %s %c %d", &p->num, p->name, &p->sex, &p->age);
i==n-1 ? stu[i].next=NULL : stu[i].next=&stu[i+1];
}
}
void print(Student *stu)
{
Student *p;
for (p=stu; p!=NULL; p=p->next)
printf("%d %7s %c %d\n", p->num, p->name, p->sex, p->age);
}
Student *del(Student *stu, int n)
{
Student *p, *head;
int i;
for (p=stu, head=p, i=1; p!=NULL; p=p->next)
if (p->age==n){
if (head==p)
head=p->next;
else if (p->next==NULL)
(p-i)->next=NULL;
else{
(p-1)->next=p+1;
i++;
}
}
return head;
}