早教吧作业答案频道 -->其他-->
求编程:构建一个链表,随机的存储十几个数字在链表里,并把这些数字打印出来。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);
}
看了 求编程:构建一个链表,随机的...的网友还看了以下:
1.设随机变量X~N(0,1)试求随机变量函数Y=X^3的密度函数2.设随机变量X服从[0,1]上 2020-04-12 …
一个口袋中有4个完全相同的小球,把它们分别标号为1,2,3,4.(1)随机摸取一个小球,求恰好摸到 2020-06-17 …
一个口袋中有4个小球,这4个小球分别标记为1,2,3,4.(1)随机模取一个小球,求恰好模到标号为 2020-06-17 …
文明出游展风采链接一:“大声喧哗,随地吐痰,乱丢垃圾,排队加塞,乱刻乱画,衣冠不整”等这些随处可见 2020-07-16 …
matlab中随机产生如何产生正互反矩阵?matlab中随机产生对于n阶矩阵,采用Matlab中的 2020-07-24 …
一个口袋中有4个小球,这4个小球分别标记为1,2,3,4.(1)随机模取一个小球,求恰好模到标号为2 2020-11-04 …
阅读下面材料,回答问题。(5分)鲁迅先生在杂文《死》的初稿中有一句话:“大约我们①看待生死都有些随随 2020-11-05 …
英语翻译1去一家电器商店2不同种类的书3买一个随身听4在一家玩具店5一家运动品商店6这家服装店7那个 2020-11-14 …
概率论,关于求方差的一个疑问,有n个相互独立的随机变量,这些随机变量的方差和是M.如果随机变量X是这 2020-12-01 …
1.因为名字最后一个字是dan所以希望里面有这些字母2.我是金牛座的,希望去个适合金牛座女生用的名字 2021-01-20 …