- 注册时间
- 2004-10-13
- 最后登录
- 2019-5-15
⑧专业
*永恒国度*
- 积分
- 14145

|
程序如下: (请问这样写算是双链吗?只列出部分) head的置空在main里进行
struct dlist
{
int num;
float score;
struct dlist *left,*right;
}*head;
void new_record() // 输入新数据
{
struct dlist *p1,*newer;
newer=(struct dlist *)malloc(sizeof(struct dlist));
p1=head;
if(head==NULL)
head=newer;
else
{
p1=head;
while(p1->right!=NULL)
{
p1=p1->right;
}
p1->right=newer;
}
p1=newer;
printf("请输入学号:");
scanf("%d",&p1->num);
printf("请输入成绩:");
scanf("%f",&p1->score);
p1->right=NULL;
}
void insert() // 根据条件插入数据
{
struct dlist *p1,*p2,*p3;
p1=head;
p2=(struct dlist *)malloc(sizeof(struct dlist));
p2->left=p2->right=NULL;
printf("请输入学号:");
scanf("%d",&p2->num);
printf("请输入成绩:");
scanf("%f",&p2->score);
if(head==NULL)
head=p2;
else
{
while(p2->num>p1->num&&p1->right!=NULL)
{
p3=p1;
p1=p1->right;
}
if(p2->num<p1->num)
{
if(p1==head)
{
head=p2;
p2->right=p1;
p1->left=p2;
}
else
{
p2->right=p3->right;
p3->right->left=p2;
p2->left=p3;
p3->right=p2;
}
}
else
{
p1->right=p2;
p2->left=p1;
}
}
}
void del() // 删除数据
{
int a;
struct dlist *p1,*p2,*p3;
if(head==NULL)
printf("信息表为空无法删除!\n");
else
{
p1=head;
printf("请输入你要删除的学号:");
scanf("%d",&a);
while(a!=p1->num &&p1->right!=NULL)
{
p3=p1;
p1=p1->right;
}
if(a==p1->num)
{
if(p1==head)
{
p2=p1;
head=p1->right;
}
if(p1->right!=NULL)
{
p2=p1;
p3->right=p1->right;
p1->right->left=p3;
}
else
{
p2=p1;
p1->left=NULL;
}
}
else
printf("没找到!\n");
}
if(p2!=NULL)
free(p2);
}
void display() // 显示数据
{
int i=0;
struct dlist *p;
if(head==NULL)
printf("信息表为空!\n");
else
{
p=head;
do
{
i=0;
printf("%d:%d的成绩为%f\n",i+1,p->num,p->score);
i++;
p=p->right;
}while(p!=NULL);
}
} |
|