c语言刷 设计题合计
355. 设计推特
#define MAX_LEN 512
struct User {
int userId;
int followee[MAX_LEN]; // 散列表,0/1,1表示这个user被关注
struct User *next;
};
struct Tweet {
int userId;
int tweetId;
struct Tweet *next;
};
typedef struct {
struct User *user;
struct Tweet *tweet
} Twitter;
Twitter* twitterCreate()
{
Twitter* obj = (Twitter*)malloc(sizeof(Twitter));
obj->user = (struct User*)malloc(sizeof(struct User));
obj->tweet = (struct Tweet*)malloc(sizeof(struct Tweet));
obj->user->next = NULL;
memset(obj->user->followee, 0, sizeof(int) * MAX_LEN);
obj->tweet->next = NULL;
return obj;
}
/*
* 注意:
* 这里只给推文这个结构体增加了userId,但是没有给用户这个结构体加,
* 所以后续用户这个结构体可能会得到user是NULL,但是不能返回空
*/
void twitterPostTweet(Twitter* obj, int userId, int tweetId)
{
struct Tweet *node = (struct Tweet *)malloc(sizeof(struct Tweet));
node->userId = userId;
node->tweetId = tweetId;
// 头插法
node->next = obj->tweet->next;
obj->tweet->next = node;
}
int* twitterGetNewsFeed(Twitter* obj, int userId, int* retSize)
{
struct User *user = obj->user->next;
struct Tweet *tweet = obj->tweet->next;
int *res = (int *)malloc(sizeof(int) * 10);
*retSize = 0;
while (user != NULL && user->userId != userId) {
user = user->next;
}
if (user == NULL) {
// 还是要遍历推文结构体
while (tweet != NULL && (*retSize < 10)) {
if (tweet->userId == userId) {
res[(*retSize)++] = tweet->tweetId;
}
tweet = tweet->next;
}
return res;
}
while (tweet != NULL && (*retSize < 10)) {
if (tweet->userId == userId || user->followee[tweet->userId] == 1) {
res[(*retSize)++] = tweet->tweetId;
}
tweet = tweet->next;
}
return res;
}
void twitterFollow(Twitter* obj, int followerId, int followeeId)
{
struct User *user = obj->user;
// 查询用户链表中是否有这个用户节点
while (user->next != NULL && user->userId != followerId) {
printf("loop \n");
user = user->next;
}
// 有:设置标志位为1
if (user->userId == followerId) {
user->followee[followeeId] = 1;
} else {
// 没有:新建一个节点
struct User *node = (struct User *)malloc(sizeof(struct User));
node->userId = followerId;
node->followee[followeeId] = 1;
node->next = obj->user->next;
obj->user->next = node;
}
}
void twitterUnfollow(Twitter* obj, int followerId, int followeeId)
{
struct User *user = obj->user;
while (user->next != NULL && user->userId != followerId) {
user = user->next;
}
if (user->userId == followerId) {
user->followee[followeeId] = 0;
}
}
void twitterFree(Twitter* obj)
{
free(obj->user);
free(obj->tweet);
free(obj);
}
/**
* Your Twitter struct will be instantiated and called as such:
* Twitter* obj = twitterCreate();
* twitterPostTweet(obj, userId, tweetId);
* int* param_2 = twitterGetNewsFeed(obj, userId, retSize);
* twitterFollow(obj, followerId, followeeId);
* twitterUnfollow(obj, followerId, followeeId);
* twitterFree(obj);
*/
c语言刷 设计题合计的更多相关文章
- 用PHP语言刷OJ题
平常在学校都是用C,C++,Java来刷OJ题,把AC的题用不同的语言再AC一次,基本相当于翻译而已.看到学校的OJ支持提交PHP代码,于是尝试了一下. 首先,得会使用PHP,但是你如果在看这篇博客, ...
- c语言刷 队列题记录
622. 设计循环队列 https://blog.csdn.net/Galaxy_n/article/details/115978544 typedef struct { int *arrs; int ...
- C语言刷数组题记录
讲解:https://mp.weixin.qq.com/s/weyitJcVHBgFtSc19cbPdw 二分法: 704. 二分查找 int search(int* nums, int numsSi ...
- c语言刷 链表题记录
61. 旋转链表 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode * ...
- c语言刷 DFS题记录
144. 二叉树的前序遍历 /** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeN ...
- 计算机二级C语言选择题错题知识点记录。
计算机二级C语言选择题错题知识点记录. 1,在数据流图中,用标有名字的箭头表示数据流.在程序流程图中,用标有名字的箭头表示控制流. 2,结构化程序设计的基本原则:自顶向下,逐步求精,模块化,限制使用g ...
- 学生管理系统-火车订票系统 c语言课程设计
概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描 ...
- C语言课程设计—图书管理系统
这是本人大一第二学期初C语言课程设计的作品,嘿嘿,本来以为已经找不到原稿了,今天无意中居然在QQ网络硬盘中找到了当初的teta版,公布于此,以作纪念. C源码例如以下: #include<std ...
- Java语言课程设计——博客作业教学数据分析系统(201521123107 张翔)
#Java语言课程设计--博客作业教学数据分析系统(个人博客) 1.团队课程设计博客链接 [博客作业教学数据分析系统(From:网络五条狗)](http://www.cnblogs.com/fanta ...
随机推荐
- K8S集群架构
- STS中创建 javaweb 项目?
package com.aaa.readme; /* * 一. * 1.安装Tomcat 版本8.5 * * 2.file---->new------>dynamic java web p ...
- MySQL8.0.28安装教程全程参考MySQL官方文档
前言 为了MySQL8.0.28安装教程我竟然在MySQL官方文档逛了一天,至此献给想入门MySQL8.0的初学者.以目前最新版本的MySQL8.0.28为示例进行安装与初步使用的详细讲解,面向初学者 ...
- 1.Flink实时项目前期准备
1.日志生成项目 日志生成机器:hadoop101 jar包:mock-log-0.0.1-SNAPSHOT.jar gmall_mock |----mock_common |----mock ...
- 2022.02.04 Day1
前言 为日后的算法面试做准备,自己也很喜欢算法这个东西,每天3~5道题. 刷题 1.leetcode 209 长度最下的子数组 题目 长度最下的子数组 大致的意思是从数组中找到长度最小的数组,并且数组 ...
- AtCoder Beginner Contest 146_E - Rem of Sum is Num
预处理即可 我们要找的是 (f[i] - f[j]) % k == i - j 移项可得 f[i] - i = f[j] - j 在 i - j <= k 的条件下 因此题目变成了,对于每个右端 ...
- springboot加载外部配置文件
网上搜集和整理如下(自己已验证过) 1. war包在tomcat中加载外部配置文件 war包运行在独立tomcat下时,如何加载war包外部配置application.properties,以达到每次 ...
- docker基础——1.原理解读
1. 相关内核知识 docker本质上是宿主机上的进程. 通过namespace实现资源隔离,通过cgroups实现资源限制,通过写时复制机制copy-on-write实现高效文件操作. 依赖kern ...
- 总结tomcat的核心组件以及根目录结构
一.目录结构说明 进入到tomcat的文件目录,可以看到以下目录结构 每一个目录都有各自的功能,如下所示: 1.1 bin目录 1.2 conf目录 1.3 logs目录 二.核心组件 tomcat核 ...
- Solution -「多校联训」朝鲜时蔬
\(\mathcal{Description}\) Link. 破案了,朝鲜时蔬 = 超现实树!(指写得像那什么一样的题面. 对于整数集 \(X\),定义其 好子集 为满足 \(Y\sub ...