问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

单链表改为双向循环链表

发布网友 发布时间:2022-04-23 12:46

我来回答

1个回答

热心网友 时间:2022-04-23 14:15

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student
{
int num;
char name[10];
float score[3];
float total;
struct student *next,*prior;
}DLNode,*DLinkList;
//建立链表
DLinkList Creat_DLinkList()
{
int x;
char y[10];
float s[3];
DLinkList DL=NULL;
DLNode *p=NULL,*q=NULL;
DL=malloc(sizeof(DLNode));
if(DL==NULL)
exit(0);
q=DL;
DL->next=NULL;
DL->prior=NULL;
printf("\nPlease enter students' information:\n");
scanf("%d%s%f%f%f",&x,y,&s[0],&s[1],&s[2]);
while(x!=0)
{
int i;
p=malloc(sizeof(DLNode));
p->num=x;
strcpy(p->name,y);
for(i=0;i<3;i++)
p->score[i]=s[i];
p->total=p->score[0]+p->score[1]+p->score[2];
q->next=p;
p->prior=q;
p->next=DL;
q=p;
scanf("%d%s%f%f%f",&x,y,&s[0],&s[1],&s[2]);
}
DL->prior=q;
return q;
}
//查找
int search(DLinkList r,int n)
{
DLNode *p,*h;
h=r->next;
p=h->next;
while(p!=h)
{
if(p->num==n)
return 1;
p=p->next;
}
return 0;
}
//添加
DLinkList add(DLinkList r)
{
int x;
char y[10];
float s[3];
DLNode *h=r->next,*p=NULL;
p=malloc(sizeof(DLNode));
printf("\nPlease enter students' information:\n");
scanf("%d%s%f%f%f",&x,y,&s[0],&s[1],&s[2]);
while(x!=0)
{
int i;
p=malloc(sizeof(DLNode));
p->num=x;
strcpy(p->name,y);
for(i=0;i<3;i++)
p->score[i]=s[i];
p->total=p->score[0]+p->score[1]+p->score[2];
p->prior=r;
r->next=p;
p->next=h;
h->prior=p;
r=p;
scanf("%d%s%f%f%f",&x,y,&s[0],&s[1],&s[2]);
}
return r;
}
//删除
void delete(DLinkList r)
{
char na[10];
DLNode *h=r->next;
DLNode *p=h->next;
DLNode *q=NULL;
while(p!=h)
{
q=p->next;
while(q!=h)
{
if(!strcmp(q->name,p->name))
{
q->prior->next=q->next;
q->next->prior=q->prior;
free(q);
}
q=q->next;
}
p=p->next;
}
}
//修改
int modify(DLinkList r,int n)
{
float s[3];
int i;
DLNode *h=r->next;
DLNode *p=h->next;
while(p!=h)
{
if(p->num==n)
{
printf("\nPlease enter new score:\n");
scanf("%f%f%f",&s[0],&s[1],&s[2]);
for(i=0;i<3;i++)
p->score[i]=s[i];
p->total=p->score[0]+p->score[1]+p->score[2];
break;
}
p=p->next;
}
if(p==h)
return 0;
else
return 1;
}
//排序
DLinkList sort(DLinkList r)
{
DLNode *t=NULL,*s=NULL;
DLNode *h=r->next;
DLNode *p=h->next;
DLNode *q=NULL;
while(p!=h)
{
q=h->next->next;
while(q!=h)
{
t=q->prior;
if(t->total<q->total)
{
s=t->prior;
t->next=q->next;
q->next->prior=t;
t->prior=q;
q->next=t;
q->prior=s;
s->next=q;
q=t;
}
q=q->next;
}
p=p->next;
}

return h->prior;
}
//输出
void print_DLinkList(DLinkList r)
{
int i;
DLNode *p,*h;
h=r->next;
p=h->next;
while(p!=h)
{
printf("number:%3d\tname:%s\tscore:%5.2f\t%5.2f\t%5.2f\ttotal:%5.2f\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->total);
p=p->next;
}
}
//释放内存
void destory(DLinkList r)
{
DLNode *h,*p,*t=NULL;
h=r->next;
p=h->next;
while(p!=h)
{
t=p->next;
free(p);
p=t;
}
free(h);
}
int main()
{
DLinkList r;
int x,n,k;
r=Creat_DLinkList();
print_DLinkList(r);
printf("\nChoose what you want:\n");
printf("1:Search information:\n");
printf("2:Add information:\n");
printf("3:Delete same name:\n");
printf("4:Modify score:\n");
printf("5:Sort degrdation:\n");
scanf("%d",&x);
switch(x)
{
case 1: printf("\nPlease enter a number:");
scanf("%d",&n);
k=search(r,n);
if(k)
print_DLinkList(r);
else
printf("\nerror!!!\n");
break;
case 2: r=add(r);
print_DLinkList(r);
break;
case 3: delete(r);
print_DLinkList(r);
break;
case 4: printf("\nPlease enter a number:");
scanf("%d",&n);
k=modify(r,n);
if(k)
print_DLinkList(r);
else
printf("\nNot found!!!\n");
break;
case 5: r=sort(r);
print_DLinkList(r);
break;
default:printf("\nEnter error!!!\n");
}
destory(r);
return 0;
}
最近在学这里,所以就帮楼主编了一下,顺便巩固巩固所学。lz有什么不懂的尽管问,我会尽量回答的。追问我想把我这个单链表改成双向循环链表,不知道怎么改

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
泳池总容积1oom是多少立方水 微信为什么改不了微信号 像这样的图片怎样弄,小圆圈上放照片写字等 像这样在照片上写字的软件,苹果 怎样才弄成像它这样的,可以写字在上面 巴基斯坦首批中国产sh15加榴炮到货,该炮有什么亮点? 亮光金油多久干 亮光金油多久干燥 牛蛙火锅是什么地方的特色呢? ...地址位于河北省大厂回族自治县,主要做牛蛙火锅,有牛羊肉,鱼丸虾丸... 美的净水器1598a 出水量少怎么回事? 美的花生净水器清洗滤芯后出水量小了,声音也比以前大了是什么原因? 个人问问美的净水器产水量变小 美的净水器1589c_75G出水小怎么修理? win7旗舰版系统,32位,2G内存,为什么内存占用百分之80.。运行程序如下。。 WIN7旗舰版物理内存使用率高 百度网盘上的文件别人能看到吗 为什么安装好WIN7旗舰版原版,占用系统38G的 治疗肾结石药物有哪些 肾结石疼吃什么药 肾结石应该吃什么药 win7旗舰版一开机就占用50%内存,正常吗 肾结石排石可注射什么扩管药? 百度网盘多人账号点了相册自动备份然后又取消了别人还会看到你的相册内容吗? 电信流量超了200MB要多少钱? 肾结石排石期间,吃那种扩管药物好 花藤字体修改? 花藤字体制作? 花藤字体怎麼设计? 各种石灰分别是什么? 下列生物中,“幼体生活在水中,用鳃呼吸;成体生活在陆地上,用肺呼吸”的是(  )A.鲨鱼B.鳄鱼C. 蟾蜍,蝮蛇和鲨鱼的共同特征是什么 OPPO Ace2机型键盘显示位置如何调整? 全民主公精英长坂坡 全民主公平山怎么过 平山三星通关攻略 详解怎么玩 全民主公貂蝉怎么样 貂蝉阵容搭配攻略 详解怎么玩 空气凤梨可以放在卧室里吗?会不会对人体有害? 《双子神偷》里,吴京的兄弟喜欢的汽车,是什么牌子,什么型号 C语言定义一个双向链表(不是双向循环列表),编程实现其中两个节点的交换(不是内容交换) 不想要的U盘怎么扔 废旧u盘怎么处理 有没有人知道如何销毁U盘的东西呀,听说办公销毁机可以,是真的吗 怎样彻底销毁u盘损坏又看不出来 对于硬盘、U盘等电子化信息存储介质,有谁知道如何销毁? 麻烦详细点 U盘被偷了,有没有什么办法远程销毁里面的文件 猫咪软件在哪儿能下载 古代测量长度叫什么 古代 有什么测量单位??? 用C语言编写一个程序,建立双向循环链表,并实现它的插入操作、删除操作 全自动喷胶机是用来做什么?谁能告诉我