社区讨论
《统计数字(P1097)》这题我用链表有什么问题
题目总版参与者 4已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @mi7z3uqz
- 此快照首次捕获于
- 2025/11/21 05:58 4 个月前
- 此快照最后确认于
- 2025/11/21 05:58 4 个月前
C
#include<bits/stdc++.h>
using namespace std;
struct node
{
long long data;
int tot;
struct node *next,*before;
};
int main()
{
struct node *head,*p,*t;
int n;
long long a;
scanf("%d%d",&n,&a);
//设首地址及相关参数
p=(struct node *)malloc(sizeof(struct node));
p->data=a;
p->next=NULL;
p->before=NULL;
p->tot=1;
head=p;
t=head;
cout<<t->data<<endl;
//输入剩下的数且寻找合适的位置
for(int i=2;i<=n;i++)
{
scanf("%d",&a);
if(t->data==a) t->tot++;//若a与此时t所指的地址中的参数(t->adta)相同,则tot+1;
else if(t->data>a) //t->data大于a的情况
{
while(t->data>a&&t!=head) t=t->before;
//搜索边界
if(t==head&&t->data>a)
{
p=(struct node *)malloc(sizeof(struct node));
p->data=a;
p->next=t;
p->before=NULL;
p->tot=1;
t->before=p;
head=p;
} //若此时链表的最小值 //仍小于a,则 //新建参数为a的结构
else if(t->data==a) t->tot++;
else
{
p=(struct node *)malloc(sizeof(struct node));
p->data=a;
p->next=t->next;
p->before=t;
p->tot=1;
t->next->before=p;
t->next=p;
} //若无a,则新建参 //数为a的结构
}
else //t->data小于a的情 //况
{
while(t->data<a&&t->next!=NULL) t=t->next;
if(t->next==NULL&&t->data<a)
{
p=(struct node *)malloc(sizeof(struct node));
p->data=a;
p->next=NULL;
p->before=t;
p->tot=1;
t->next=p;
} //若此时链表的最大 //值仍大于a....... //(此后与前相同)
else if(t->data==a) t->tot++;
else
{
p=(struct node *)malloc(sizeof(struct node));
p->data=a;
p->next=t;
p->before=t->before;
p->tot=1;
t->before->next=p;
t->before=p;
}
}
}
t=head;
while(t!=NULL)
{
cout<<t->data<<" "<<t->tot<<endl;
t=t->next; //输出
}
return 0;
}
好绝望。。。还特意去翻书完成链表。。。
其实第一个WA的测试点我输出结果完全一样。。。
大家可以拷下来自己去试一下
回复
共 6 条回复,欢迎继续交流。
正在加载回复...