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 ...
随机推荐
- 使用Hot Chocolate和.NET 6构建GraphQL应用(3) —— 实现Query基础功能
系列导航 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引 需求 在本文中,我们通过一个简单的例子来看一下如何实现一个最简单的GraphQL的接口. 实现 引入Hot Cho ...
- ansible 常用模块和playbook
- vs2012 error: package 'visual c++ package' failed to load
某天打开Visual Studio突然出现了"error: package 'visual c++ package' failed to load",解决方案如下: 1. 依此顺序 ...
- Ajax创建对象的方法
ajax涉及的技术包括Html.css.dom.xml.javascript等. 主流创建ajax对象的方法: IE6以下版本浏览器创建ajax对象方法是: 定义一个方法创建ajax对象:
- Android返回键
感谢大佬:https://www.cnblogs.com/qiluboy/p/5308310.html Android中back键和home键的区别: back键 Android的程序无需刻意的去退出 ...
- 解决Android3.0之后不能在主线程中进行HTTP请求
感谢大佬:https://www.cnblogs.com/falzy/p/5763848.html 在Android3.0以后,会发现,只要是写在主线程(就是Activity)中的HTTP请求,运行时 ...
- 使用Java开发桌面即时通讯程序遇到的问题
项目:https://www.lking.top/?p=87 1. JPanel面板绘制背景图片问题. 参考大佬:https://www.jb51.net/article/101516.htm 本项目 ...
- Python属性描述符
实现了__get__.set.__delete__中任意一个方法的类,称之为属性描述符. 属性描述符可以控制属性操作时的一些行为. 只要具有__get__方法的类就是描述符类. 如果一个类中具有__g ...
- 什么是rest?restful?
百度百科解释: rest:REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的 ...
- JavaWeb项目中斜杠(/)表示web工程、webapps的场景
"/"代表当前web工程的常见应用场景 ①.ServletContext.getRealPath(String path)获取资源的绝对路径 /** * 1.ServletCont ...