统计字母比例 单链表是一种数据结构,由若干个结点组成。每个结点包含数据和下一个结点的地址。从头结点开始,通过下一个结点的地址找到下一个结点,如此循环,直到下一个结点的地址为空。
现给出一个单链表,每个结点包含的数据是一个字符(大写英文字母)。求该链表上的结点数据中各个字母所占比例。
输入格式:
第一行给出链表第一个结点的地址H和要给出的结点总个数N。其中结点地址H用5位非负整数表示,N为不大于10000的正整数。 之后N行,每行按如下格式给出结点信息:
Address Data Next
Address为结点地址,Data为A-Z中的一个字母,Next为下一个结点的地址,Address和Next格式同H。当Next为-1时表示该结点没有下一个结点,链表遍历结束。
输出格式:
按A-Z的顺序,按以下格式输出各个字母所占比例:
【数据结构|PTA线性表—统计字母比例】Character Percentage
其中Character为英文字母, Percentage为百分比,保留到小数点后2位。中间以空格分隔。 如果该字母没有出现过,则不输出。
输入样例:
00001 10
01044 E 01055
00100 C 01011
00001 D 00100
09996 D 00253
01011 A 00045
00045 V 09876
09876 E 09996
00253 D 00999
00999 A 01044
01055 G -1
结尾无空行
输出样例:
A 20.00%
C 10.00%
D 30.00%
E 20.00%
G 10.00%
V 10.00%
结尾无空行
逻辑
模拟。
AC代码
顺序表
#include
using namespace std;
struct MyStruct
{
int address;
char data;
int next;
};
int main()
{
int addr;
int n;
double cnt[26] = {};
MyStruct a[10005];
int all = 0;
cin >> addr >> n;
for (int i = 0;
i < n;
i++)
{
cin >> a[i].address >> a[i].data >> a[i].next;
}
for (int i = addr;
i != -1;
)
{
for (int j = 0;
j < n;
j++)
{
if (a[j].address == i)
{
cnt[a[j].data - 65]++;
all++;
i = a[j].next;
break;
}
}
}
for (int i = 0;
i < 26;
i++)
{
if (cnt[i] != 0)
{
printf("%c %.2f%%\n", 'A' + i, cnt[i] * 1.0 / all * 100);
}
}
return 0;
}
链式表
#include
using namespace std;
typedef struct LNode
{
int Address;
char Data;
int Next;
struct LNode* next;
}LNode,*Linklist;
int main()
{
int addr,n;
cin>>addr>>n;
Linklist l,s,r;
l=(Linklist)malloc(sizeof(LNode));
cin>>l->Address>>l->Data>>l->Next;
l->next=NULL;
r=l;
for(int i=1;
i>s->Address>>s->Data>>s->Next;
r->next=s;
r=r->next;
}
r->next=l;
double a[26]={};
int cnt=0;
for(int i=addr;
i!=-1;
)
{
if(i==l->Address)
{a[l->Data-65]++;
cnt++;
i=l->Next;
}
l=l->next;
}
for(int i=0;
i<26;
i++)
{
if(a[i]!=0)
printf("%c %.2f%%\n",'A'+i,a[i]*1.0/cnt*100);
}
return 0;
}
推荐阅读
- Python|【蓝桥杯国赛真题】备战24天 Python
- 算法与数据结构|算法与数据结构——AcWing算法题常用代码模板
- 蓝桥杯|蓝桥杯——1.2递归实现排列型枚举
- 蓝桥杯|蓝桥杯——1.5递归实现组合型枚举
- Java|不会数据结构(24张图让你彻底弄懂它,还不会你来打我!)
- Java程序设计|Java——集合
- 1|java基础--5HashMap专题
- 数据结构与算法|数据结构学习笔记 1-1链表概述及LeetCode真题图解(Java)
- C语言学习教程|C语言指针进阶-全面分析C指针重难点逐一突破(终篇)