早教吧作业答案频道 -->其他-->
求编程:构建一个链表,随机的存储十几个数字在链表里,并把这些数字打印出来。2、在上一题的基础上,把链表反转:例如:1->3->6->2->91
题目详情
求编程:
构建一个链表,随机的存储十几个数字在链表里,并把这些数字打印出来。
2、在上一题的基础上,把链表反转:
例如:
1 -> 3 -> 6 -> 2 -> 9
1 3、在“第一题”的基础上,快速得到倒数第5个元素的值。
构建一个链表,随机的存储十几个数字在链表里,并把这些数字打印出来。
2、在上一题的基础上,把链表反转:
例如:
1 -> 3 -> 6 -> 2 -> 9
1 3、在“第一题”的基础上,快速得到倒数第5个元素的值。
▼优质解答
答案和解析
//为了练习,专门写的,希望满意
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
typedef struct da
{
int num;
struct da *next;
}date;
date *create(void)
{
date *head,*p=NULL,*p0;
int m=0,i=0,N;
p=(date *)malloc(sizeof(date));
head=p;
printf("请输入链表长度N:");
scanf("%d",&N);
srand((unsigned)time(NULL));
m=rand()%100;
p->num=m;
for(i=1;i<N;i++)
{
m=rand()%100;
p0=(date *)malloc(sizeof(date));
p0->num=m;
p->next=p0;
p=p0;
}
p0->next=NULL;
return head;
}
void output(date *head)
{
date *p;
p=head;
while(p->next!=NULL)
{
printf("%-3d-> ",p->num);
p=p->next;
}
printf("%-3d",p->num);
printf("\n");
}
void save(date *head)
{
FILE *fp;
date *p;
p=head;
if((fp=fopen("test.txt","wt"))==NULL)
{
printf("error!");
exit(0);
}
while(p!=NULL)
{
fprintf(fp,"%d ",p->num);
p=p->next;
}
fclose(fp);
}
date *read(void)
{
FILE *fp;
date *p=NULL,*p1=NULL,*head;
p1=(date *)malloc(sizeof(date));
head=p1;
if((fp=fopen("test.txt","rt"))==NULL)
{
printf("暂未录入任何信息!\n");
exit(0);
}
while(feof(fp)==0)
{
p=(date *)malloc(sizeof(date));
fscanf(fp,"%d",&p->num);
if(feof(fp))
{
free(p);
p1->next=NULL;
break;
}
p1->next=p;
p1=p;
}
fclose(fp);
return head->next;
}
date *back(date *head)
{
date *first=NULL,*tail,*p0,*p=head,*p1;
while(p!=NULL)
{
for(p=head,p0=head;p->next!=NULL;p=p->next)
{
p1=p;
p0=p->next;
}
if(first==NULL)
{
first=p0;
tail=p0;
}
else
{
tail->next=p0;
tail=p0;
}
if(p0!=head)
p1->next=NULL;
else p=NULL;
}
tail->next=NULL;
return first;
}
void five(date *head)
{
int i=0,k=0;
date *p=head,*q=head;
output(p);
while(p!=NULL)
{
p=p->next;
i++;
}
printf("链表长度为%d\n",i);
if(i<5)
printf("不存在倒数第5个数字!\n");
else
for(k=5;k<i;k++)
q=q->next;
printf("其中倒数第5个数字为%d\n",q->num);
}
int main()
{
date *p=NULL,*q=NULL;
int i=10;
p=read();
while(i)
{
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("\t1 重新随机数字\n");
printf("\t2 查看内容 \n");
printf("\t3 反向输出 \n");
printf("\t4 第五个数字 \n");
printf("\t0 退 出 \n");
printf("\t 请 选 择 \n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
scanf("%d",&i);
switch(i)
{
case 1:p=create();output(p);break;
case 2:output(p);break;
case 3:p=back(p);printf("反向输入结果为:\n");output(p);break;
case 4:five(p);break;
case 0:break;
default:printf("输入有误 重新输入!\n");break;
}
printf("按任意键继续!...");
getch();
system("cls");
}
save(p);
}
看了 求编程:构建一个链表,随机的...的网友还看了以下:
保险公司在资产负债表中表现的存货一般为( )。 2020-05-22 …
保险公司在资产负债表中表现的存货一般为( )。A.原材料B.在产品C.半产品###SX 2020-05-22 …
填制销售发货单时,表体的存货记录进行批次管理,不进行出库跟踪入库管理,则以下说法正确的是()。 2020-05-31 …
我上课基本不听D~但是作业还是要做滴..分都给你们了蚯蚓的问题:用手指在蚯蚓的体表抚摸,感觉有些, 2020-06-03 …
商业银行资产负债表中的“存放中央银行款项”属于( )。A.流动负债B.长期资产 C.所有者权 2020-06-27 …
资产负债表中的“存货”项目由下列()账户的余额计算填列。A.原材料、低值易耗品、包装物B.分期收款 2020-07-12 …
资产负债表中的存货项目金额例题:某企业期末“工程物资”科目的余额为100万元,“发出商品”科目的余额 2020-11-05 …
在价格上升期间,企业将存货的计价方法由原来的加权平均法改为先进先出法后,对企业毛利、资产负债表上的存 2020-11-17 …
10、资产负债表中的“存货”项目反映的内容包括()。A、发出商品B、材料成本差异C、10、资产负债表 2021-01-14 …
资产负债表中的存货项目的列示不需要考虑的账户有()。A.材料成本差异B.生产成本C.制造费用D.存货 2021-01-14 …