实验十 链表
1、
2、
3、
#include<stdio.h>
#include<stdlib.h>
void main()
{
int *a,*b,*c,*min;
a=(int *)malloc(sizeof(int));
b=(int *)malloc(sizeof(int));
c=(int *)malloc(sizeof(int));
min=(int *)malloc(sizeof(int));
printf("输入三个整数:");scanf("%d %d %d",a,b,c);
printf("输出这三个整数:%d %d %d \n",*a,*b,*c);
*min=*a;
if(*a>*b) *min=*b;
if(*a>*c) *min=*c;
printf("输出最小整数:%d\n",*min);
free(a);free(b);free(c);free(min);
}
#include<stdlib.h>
void main()
{
int *a,*b,*c,*min;
a=(int *)malloc(sizeof(int));
b=(int *)malloc(sizeof(int));
c=(int *)malloc(sizeof(int));
min=(int *)malloc(sizeof(int));
printf("输入三个整数:");scanf("%d %d %d",a,b,c);
printf("输出这三个整数:%d %d %d \n",*a,*b,*c);
*min=*a;
if(*a>*b) *min=*b;
if(*a>*c) *min=*c;
printf("输出最小整数:%d\n",*min);
free(a);free(b);free(c);free(min);
}
2、
#include<stdio.h>
#include<stdlib.h>
struct list
{
char data;
struct list *next;
};
struct list *create()
{
struct list *h,*p,*q;
char ch;
h=(struct list *)malloc(sizeof(struct list));
p=q=h;
ch=getchar();
while(ch!='?')
{
p=(struct list *)malloc(sizeof(struct list));
p->data=ch;
q=p;
ch=getchar();
}
p->next=NULL;
return h;
}
void main()
{
}
#include<stdlib.h>
struct list
{
char data;
struct list *next;
};
struct list *create()
{
struct list *h,*p,*q;
char ch;
h=(struct list *)malloc(sizeof(struct list));
p=q=h;
ch=getchar();
while(ch!='?')
{
p=(struct list *)malloc(sizeof(struct list));
p->data=ch;
q=p;
ch=getchar();
}
p->next=NULL;
return h;
}
void main()
{
}
3、
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<ctype.h>
#define LEN sizeof(struct student)
struct student
{
long num;
char name[20];
float score[3];
struct student *next;
};
int n;
struct student *create()
{
struct student *h,*p,*q;
n=0;h=NULL;
p=(struct student *)malloc(LEN);
scanf("%ld %s %f %f %f",&p->num,p->name,&p->score[0],&p->score[1],&p->score[2]);
p->next=NULL;
while(p->num!=0)
{
++n;
if(n==1) h=p;
else q->next=p;
q=p;
p=(struct student *)malloc(LEN);
scanf("%ld %s %f %f %f",&p->num,p->name,&p->score[0],&p->score[1],&p->score[2]);
p->next=NULL;
}
free(p);
return (h);
}
void print(struct student *head)
{
struct student *p;
printf("\n现在共有%d个学生信息:\n",n);
p=head;
if(head!=NULL)
do
{
printf("学号\t姓名\t语文\t数学\t英语\n");
printf("%ld\t%s\t%.2f\t%.2f\t%.2f\n",p->num,p->name,p->score[0],p->score[1],p->score[2]);
p=p->next;
}while(p!=NULL);
}
struct student *insert(struct student *head,struct student *stud)
{
struct student *p0,*p1,*p2;
p1=head;
p0=stud;
if(head==NULL)
{head=p0;p0->next=NULL;}
else
{
while((p0->num>p1->num)&&(p1->next!=NULL))
{p2=p1;p1=p1->next;}
if(p0->num<=p1->num)
{
if(head==p1) head=p0;
else p2->next=p0;
p0->next=p1;
}
else
{p1->next=p0;p0->next=NULL;}
}
++n;
return head;
}
struct student *del(struct student *head,long num)
{
struct student *p1,*p2;
if(head==NULL)
{
printf("\n无学生信息!\n");
goto end;
}
p1=head;
while(num!=p1->num&&p1->next!=NULL)
{p2=p1;p1=p1->next;}
if(num==p1->num)
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
printf("删除:%ld\n",num);
free(p1);
n--;
}
else
printf("无学号%ld记录!\n",num);
end:
return head;
}
struct student *find(struct student *head,long num)
{
struct student *p1,*p2;
if(head==NULL)
{
printf("\n无学生信息!\n");
goto end;
}
p1=head;
while(num!=p1->num&&p1->next!=NULL)
{p2=p1;p1=p1->next;}
if(num==p1->num)
printf("查找结果:%ld\t%s\t%.2f\t%.2f\t%.2f\n",num,p1->name,p1->score[0],p1->score[1],p1->score[2]);
else
printf("没有发现%ld学生记录!\n",num);
end:
return head;
}
void main()
{
struct student *head,*stu;
long find_num,del_num;
char letter;
printf("请输入学生信息(学号为0结束):\n");
head=create();
print(head);
do
{
printf("A 插入学生信息\n");
printf("B 查找学生信息\n");
printf("C 删除学生信息\n");
printf("Q 退出\n");
printf("请选择: \n");
letter = getch();
letter = toupper(letter);
switch (letter)
{
case 'A':
printf("请输入要插入的学生信息:\n");
stu=(struct student *)malloc(LEN);
scanf("%ld %s %f %f %f",&stu->num,stu->name,&stu->score[0],&stu->score[1],&stu->score[2]);
head=insert(head,stu);
print(head);
break;
case 'B':
printf("请输入要查找的学生学号:\n");
scanf("%ld",&find_num);
head=find(head,find_num);
//print(head);
break;
case 'C':
printf("请输入要删除的学生学号:\n");
scanf("%ld",&del_num);
head=del(head,del_num);
print(head);
break;
}
}while (letter != 'Q');
}
#include<stdlib.h>
#include<conio.h>
#include<ctype.h>
#define LEN sizeof(struct student)
struct student
{
long num;
char name[20];
float score[3];
struct student *next;
};
int n;
struct student *create()
{
struct student *h,*p,*q;
n=0;h=NULL;
p=(struct student *)malloc(LEN);
scanf("%ld %s %f %f %f",&p->num,p->name,&p->score[0],&p->score[1],&p->score[2]);
p->next=NULL;
while(p->num!=0)
{
++n;
if(n==1) h=p;
else q->next=p;
q=p;
p=(struct student *)malloc(LEN);
scanf("%ld %s %f %f %f",&p->num,p->name,&p->score[0],&p->score[1],&p->score[2]);
p->next=NULL;
}
free(p);
return (h);
}
void print(struct student *head)
{
struct student *p;
printf("\n现在共有%d个学生信息:\n",n);
p=head;
if(head!=NULL)
do
{
printf("学号\t姓名\t语文\t数学\t英语\n");
printf("%ld\t%s\t%.2f\t%.2f\t%.2f\n",p->num,p->name,p->score[0],p->score[1],p->score[2]);
p=p->next;
}while(p!=NULL);
}
struct student *insert(struct student *head,struct student *stud)
{
struct student *p0,*p1,*p2;
p1=head;
p0=stud;
if(head==NULL)
{head=p0;p0->next=NULL;}
else
{
while((p0->num>p1->num)&&(p1->next!=NULL))
{p2=p1;p1=p1->next;}
if(p0->num<=p1->num)
{
if(head==p1) head=p0;
else p2->next=p0;
p0->next=p1;
}
else
{p1->next=p0;p0->next=NULL;}
}
++n;
return head;
}
struct student *del(struct student *head,long num)
{
struct student *p1,*p2;
if(head==NULL)
{
printf("\n无学生信息!\n");
goto end;
}
p1=head;
while(num!=p1->num&&p1->next!=NULL)
{p2=p1;p1=p1->next;}
if(num==p1->num)
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
printf("删除:%ld\n",num);
free(p1);
n--;
}
else
printf("无学号%ld记录!\n",num);
end:
return head;
}
struct student *find(struct student *head,long num)
{
struct student *p1,*p2;
if(head==NULL)
{
printf("\n无学生信息!\n");
goto end;
}
p1=head;
while(num!=p1->num&&p1->next!=NULL)
{p2=p1;p1=p1->next;}
if(num==p1->num)
printf("查找结果:%ld\t%s\t%.2f\t%.2f\t%.2f\n",num,p1->name,p1->score[0],p1->score[1],p1->score[2]);
else
printf("没有发现%ld学生记录!\n",num);
end:
return head;
}
void main()
{
struct student *head,*stu;
long find_num,del_num;
char letter;
printf("请输入学生信息(学号为0结束):\n");
head=create();
print(head);
do
{
printf("A 插入学生信息\n");
printf("B 查找学生信息\n");
printf("C 删除学生信息\n");
printf("Q 退出\n");
printf("请选择: \n");
letter = getch();
letter = toupper(letter);
switch (letter)
{
case 'A':
printf("请输入要插入的学生信息:\n");
stu=(struct student *)malloc(LEN);
scanf("%ld %s %f %f %f",&stu->num,stu->name,&stu->score[0],&stu->score[1],&stu->score[2]);
head=insert(head,stu);
print(head);
break;
case 'B':
printf("请输入要查找的学生学号:\n");
scanf("%ld",&find_num);
head=find(head,find_num);
//print(head);
break;
case 'C':
printf("请输入要删除的学生学号:\n");
scanf("%ld",&del_num);
head=del(head,del_num);
print(head);
break;
}
}while (letter != 'Q');
}