#include<stdio.h>
#include<malloc.h>
struct student{
int num;
float score;
struct student *next;
};
int n = 0;
int main(){
void print(struct student*);
struct student *insert(struct student *,struct student *);
struct student *del(struct student *,int del_num);
struct student *creat(void);
void print(struct student *);
int del_num;
struct student *head,*in_num;
printf("请输入链表数据:\n");
head = creat();
printf("请输入需要插入的数据:\n");
in_num = (struct student*)malloc(sizeof(struct student));
scanf("%d %f",&in_num->num,&in_num->score);
while(in_num->num != 0){
head = insert(head,in_num);
print(head);
printf("请输入需要插入的数据:\n");
in_num = (struct student*)malloc(sizeof(struct student));
scanf("%d %f",&in_num->num,&in_num->score);
}
printf("请输入需要删除的数据:\n");
scanf("%d",&del_num);
while(del_num){
head = del(head,del_num);
print(head);
printf("请输入需要删除的数据:\n");
scanf("%d",&del_num);
}
return 0;
}
struct student *del(struct student *head,int del_num){
struct student *p1,*p2;
p1 = head;
while(p1->num != del_num && p1->next !=NULL){
p2 = p1;
p1 = p1->next;
}
if(p1->num == del_num){
if(p1 == head)
head = head->next;
else
p2->next = p1->next;
n--;
}
else
printf("未找到此学号!\n");
return head;
}
struct student *insert(struct student *head,struct student *del_num){
struct student *p1,*p2;
p1 = head;
while(p1->num < del_num->num && p1->next != NULL){
p2 = p1;
p1 = p1->next;
}
if(p1->num >= del_num->num){
if(p1 == head)
head = del_num;
else
p2->next = del_num;
del_num->next = p1;
}
else{
p1->next = del_num;
del_num->next = NULL;
}
n++;
return head;
}
void print(struct student *head){
struct student *p1;
printf("所有节点数据为:\n");
p1 = head;
while(p1 != NULL){
printf("%-5d%-5.2f\n",p1->num,p1->score);
p1 = p1->next;
}
}
struct student *creat(){
struct student *head,*p1,*p2;
head = NULL;
p2 = p1 = (struct student*)malloc(sizeof(struct student));
scanf("%d %f",&p1->num,&p1->score);
while(p1->num != 0){
n++;
if(n == 1)
head = p1;
else
p2->next = p1;
p2 = p1;
p1 = (struct student*)malloc(sizeof(struct student));
scanf("%d %f",&p1->num,&p1->score);
}
p2->next = NULL;
return head;
}
建立一个链表,并实现增加节点和删除节点功能
最新推荐文章于 2024-06-27 01:20:56 发布