输入5个学生的编号和成绩,输入0代表结束。
#include
#include
#define SIZE sizeof(struct student) // 定义结构大小
#define STU struct student // 定义宏
STU {
long num; // num 学号
float score; // 成绩
STU *next; // 指针
}; // 定义结构体
int n; // 全局变量,记录学生个数
STU *creat() // 建立案表
{
STU *head,*p1,*p2; // p1,p1用于定位
head=NULL; // 初始为空
n=0;
p1=p2=(STU *)malloc(SIZE); //开辟空间
scanf("%ld,%f",&p1->num,&p1->score); // 输入数据
while (p1->num != 0) {
n=n+1;
if (n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(STU *)malloc(SIZE);
scanf("%ld,%f",&p1->num,&p1->score);
}
p2->next=NULL; // 表尾的指针域为空
return(head); // 返回表头
}
void print(STU *head) // 输出数据
{
STU *p;
printf("\nNow, These %d recores are:\n",n);
p=head;
if (head!=NULL)
do {
printf("%ld,%5.1f\n",p->num,p->score);
p=p->next;
} while(p!=NULL);
}
STU *del(STU *head,long del_num) // 删除数据
{
STU *p1,*p2;
if (head==NULL) {printf("\nlist is null:\n"); goto end;}
p1=head;
while (del_num!=p1->num && p1->next!=NULL) {
p2=p1;p1=p1->next;
}
if (del_num==p1->num) {
if (p1==head) { head=p1->next; free(p1); }
else { p2->next=p1->next; free(p1); }
printf("delete :%ld\n",del_num);
n=n-1;
}
else {
printf("%ld not been found!\n",del_num);
}
end:
return(head);
}
STU *insert(STU *head,STU *newstu) // 插入数据
{
STU *p1,*p2,*newp; // p1,p2用于定位,newp是插入的数据
p1=head;
newp=newstu;
if (head==NULL) { head=newp; newp->next=NULL; }
else {
while (newp->num>p1->num && p1->next!=NULL) {
p2=p1;p1=p1->next;
}
if (newp->num<=p1->num) {
if (p1==head) { head=newp; newp->next=p1;}
else { p2->next=newp;newp->next=p1; }
}
else {
p1->next=newp;newp->next=NULL;
}
}
n=n+1;
return(head);
}
void main()
{
STU *head,*newstu; // head-链表头,newstu-插入新节点
long del_num; // del_num 删除的学号
printf("input recored: \n");
head=creat();
print(head);
printf("\ninput delete: ");
scanf("%ld",&del_num);
while (del_num!=0) {
head=del(head,del_num);
print(head);
printf("\ninput delete: ");
scanf("%ld",&del_num);
}
printf("\ninput inseted:\n");
newstu=(STU *)malloc(SIZE);
scanf("%ld,%f",&newstu->num,&newstu->score);
while (newstu->num!=0) {
head=insert(head,newstu);
print(head);
printf("\ninput inseted:\n");
newstu=(STU *)malloc(SIZE);
scanf("%ld,%f",&newstu->num,&newstu->score);
}
}
阅读(1479) | 评论(0) | 转发(0) |