统计学生信息(动态链表)

#include<bits/stdc++.h>
using namespace std;
struct data
{//建立结构体data,方便存储信息,也方便输入输出
    char num[25],name[45],sex,score[45],address[45];
    int age;
    bool scan()
    {
        cin>>num;
        if(strcmp(num,"end")==0)
        return true;//如果输入end,就停止输入,返回true
        cin>>name>>sex>>age>>score>>address;
        return false;//输入还没有停止,返回false
    }
    void print()
    {cout<<num<<" "<<name<<" "<<sex<<" "<<age<<" "<<score<<" "<<address<<endl;//输出信息
    }
};
struct node
{data d;//d表示该节点对应元素的信息
node *next,*pre;//next指向结点的后继,pre指向结点的前驱
}*head,*tail,*p;//head表示头指针,tail表示尾指针
int n,k;
int main()
{head=new node;
    head->pre=head->next=NULL;
    tail=head;//新建一个虚拟头结点(不存储元素的值)方便删除操作(不会越界),此时头尾指针都指向它
    while(1)
    {
        p=new node;
        if(p->d.scan())//输入该学生的信息
        break;//如果输入已经停止,就跳出循环


        p->pre=tail;
        tail->next=p;//将p指向的结点插入到tail指向的结点后面
        p->next=NULL;
        tail=p;//将tail更新为p,下次就插入到它的后面
    }
    p=tail;//从尾结点向前遍历
    while(p!=head)//遍历到虚拟头结点时停止
    {p->d.print();//输出该学生的信息
    p=p->pre;
    }
    return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用动态链表实现字符的频度统计可以通过以下步骤实现: 1. 定义一个结构体作为链表的节点,包含字符、出现次数和指向下一个节点的指针。 2. 定义一个头结点指针和一个尾结点指针,初始时头结点和尾结点都指向 NULL。 3. 读入字符序列,遍历每个字符并在链表中查找是否已存在该字符。如果存在,则将该字符对应的节点的出现次数加一,否则在链表末尾插入一个新节点。 4. 在链表中插入新节点时,需要遍历整个链表找到插入位置。因此,该实现方法的时间复杂度为 O(n)。 5. 链表中节点的顺序可以按照出现次数从大到小排列,这样可以方便地获取出现次数最多的字符。 Redis zset内部实现也可以使用类似的方法。在 Redis 中,zset 是一个有序集合,可以存储多个元素,并且每个元素都有一个对应的分数。在该实现中,可以将字符作为元素,出现次数作为分数。具体实现步骤如下: 1. 通过 Redis 提供的 zadd 命令向 zset 中添加元素,将字符作为元素,出现次数作为分数。 2. 通过 Redis 提供的 zrange 命令获取 zset 中的元素,可以指定元素的范围和排序方式。在该实现中,可以按照分数从大到小排序,获取出现次数最多的字符。 3. 在 zset 中插入新元素时,需要检查该元素是否已存在,如果存在则将分数加一,否则添加一个新元素。在 Redis 内部,zset 使用跳跃表实现,插入元素的时间复杂度为 O(log n)。 综上所述,使用动态链表实现字符的频度统计和 Redis zset 内部实现都可以实现该功能,但是实现方式略有不同。动态链表实现比较简单,但时间复杂度较高;Redis zset 内部实现使用跳跃表实现,时间复杂度较低,但需要使用 Redis 提供的命令来操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Famiglistimott

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值