习题 9.12 建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。

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;
}

猜你喜欢

转载自blog.csdn.net/navicheung/article/details/81023261
今日推荐