代码:
#include<stdio.h>
#include<stdlib.h>
struct Student{
int num;
char name[20];
char sex;
int age;
struct Student *next;
};
int main(){
struct Student *creat();
struct Student *del(struct Student *head,int age);
void print(struct Student *head);
struct Student *head;
int age;
printf("请输入要删除的年龄");
scanf("%d",&age);
head=creat();
head=del(head,age);
print(head);
return 0;
}
struct Student *creat(){
struct Student *head,*p,*q;
int n=0;
p=(struct Student *)malloc(sizeof(struct Student));
scanf("%d",&p->num);
scanf("%s",&p->name);
getchar();
scanf("%c",&p->sex);
getchar();
scanf("%d",&p->age);
while(p->num!=0){
n++;
if(n==1){
head=p;
}else{
q->next=p;
}
q=p;
p=(struct Student *)malloc(sizeof(struct Student));
scanf("%d",&p->num);
scanf("%s",p->name);
getchar();
scanf("%c",&p->sex);
getchar();
scanf("%d",&p->age);
}
q->next=NULL;
return head;
}
struct Student *del(struct Student *head,int age){
struct Student *p,*q;
p=head;
while(p->next!=NULL&&p->age!=age){
q=p;
p=p->next;
}
if(p->age==age){
if(p==head){
head=p->next;
free(p);
}else{
q->next=p->next;
free(p);
}
}else{
printf("Not Find");
}
return head;
}
void print(struct Student *head){
struct Student *p=head;
do{
printf("%d\t%s\t%c\t%d\n",p->num,p->name,p->sex,p->age);
p=p->next;
}while(p!=NULL);
}
注意点:因为输入的数据比较多,而且有字符串和字符的输入,所以一定要注意回车的问题。这也是小编在编写时遇到的问题。
这道题的逻辑还是很简单的,遍历直到找到要删除的结点,直接删除就好,就是细节要注意的比较多,大家要细心观察。
输入样例:
请大家注意一定要以0000为输入结束的标志,小编这里的样例只是为了给大家提供一个例子,姓名,性别这边没有什么限制,只不过,性别是一个字符大家也要注意哦~