当前位置:网站首页>An implementation of an ordered doubly linked list.
An implementation of an ordered doubly linked list.
2022-08-01 19:31:00 【CaspianSea】
Use the head node and tail node to manage the linked list, it is easier to traverse, delete, and modify.
struct room{int price;int mID;int type;int region;int listIdx;};struct roomList{int idx;int next;int prev;int tc_id;};room g_room[1000];int g_roomIdx;int g_tcId;roomList g_roomListBuf[1000 + 200 + 1];int g_roomListBufIdx;int g_roomHeadList[10][10];int g_roomTailList[10][10];void init(){g_roomListBufIdx = 1;for (int i = 0; i < 10; ++i){for (int j = 0; j < 10; ++j){int p = g_roomHeadList[i][j] = g_roomListBufIdx++;int q = g_roomTailList[i][j] = g_roomListBufIdx++;g_roomListBuf[p].next = q;g_roomListBuf[q].prev = p;g_roomListBuf[p].prev = g_roomListBuf[q].next = 0;}}++g_tcId;}void addRoom(int mID, int type, int region, int price){//int i = g_roomIdx++;g_room[mID].mID = mID;g_room[mID].price = price;g_room[mID].type = type;g_room[mID].region = region;int j = g_roomListBufIdx++;g_room[mID].listIdx = j;g_roomListBuf[j].idx = mID;g_roomListBuf[j].next = g_roomListBuf[j].prev = 0;//g_roomListBuf[j].tc_id = g_tcId;int k = g_roomHeadList[type][region];int iter = g_roomListBuf[k].next;int tail = g_roomTailList[type][region];while ( iter!= tail && g_room[g_roomListBuf[iter].idx].price < price){iter = g_roomListBuf[iter].next;}int prev = g_roomListBuf[iter].prev;g_roomListBuf[prev].next = j;g_roomListBuf[j].prev = prev;g_roomListBuf[j].next = iter;g_roomListBuf[iter].prev = j;}void modifyPrice(int mID, int price){int oldPrice = g_room[mID].price;g_room[mID].price = price;int listIdx = g_room[mID].listIdx;int prev = g_roomListBuf[listIdx].prev;int next = g_roomListBuf[listIdx].next;g_roomListBuf[prev].next = next;g_roomListBuf[next].prev = prev;int type = g_room[mID].type;int region = g_room[mID].region;if (oldPrice < price){int iter = next;int tail = g_roomTailList[type][region];while (iter != tail && g_room[g_roomListBuf[iter].idx].price < price){iter = g_roomListBuf[iter].next;}prev = g_roomListBuf[iter].prev;g_roomListBuf[prev].next = listIdx;g_roomListBuf[listIdx].prev = prev;g_roomListBuf[iter].prev = listIdx;g_roomListBuf[listIdx].next = iter;}else{int iter = prev;int head = g_roomHeadList[type][region];while (iter != head && g_room[g_roomListBuf[iter].idx].price > price){iter = g_roomListBuf[iter].prev;}next = g_roomListBuf[iter].next;g_roomListBuf[next].prev = listIdx;g_roomListBuf[listIdx].next = next;g_roomListBuf[iter].next = listIdx;g_roomListBuf[listIdx].prev = iter;}}Test code:
void printRoom(int type, int region){int idx = g_roomHeadList[type][region];int iter = g_roomListBuf[idx].next;int head = g_roomTailList[type][region];while (iter != head){int roomIdx = g_roomListBuf[iter].idx;std::cout << "room " << g_room[roomIdx].mID << " price " << g_room[roomIdx].price << std::endl;iter = g_roomListBuf[iter].next;}}int main(void){init();addRoom(100, 1, 0, 1560);addRoom(90, 1, 0, 980);addRoom(10, 1, 0, 8700);addRoom(9, 1, 0, 3290);addRoom(1, 1, 0, 2200);addRoom(2, 1, 0, 4400);printRoom(1, 0);modifyPrice(9, 7500);std::cout << "**********************************************" << std::endl;printRoom(1, 0);return 0;}Run result:
room 90 price 980
room 100 price 1560
room 1 price 2200
room 9 price 3290
room 2 price 4400
room 10 price 8700
*********************************************
room 90 price 980
room 100 price 1560
room 1 price 2200
room 2 price 4400
room 9 price 7500
room 10 price 8700
边栏推荐
猜你喜欢

使用常见问题解答软件的好处有哪些?

#yyds dry goods inventory# Interview must brush TOP101: the last k nodes in the linked list

Redis启动时提示Creating Server TCP listening socket *:6379: bind: No error

在表格数据上,为什么基于树的模型仍然优于深度学习?

58:第五章:开发admin管理服务:11:开发【管理员人脸登录,接口】;(未实测)(使用了阿里AI人脸识别)(演示了,使用RestTemplate实现接口调用接口;)

工作5年,测试用例都设计不好?来看看大神的用例设计总结

Hardware Bear Original Collection (Updated 2022/07)

Greenplum数据库源码分析——Standby Master操作工具分析

Creo5.0草绘如何绘制正六边形

30天刷题计划(五)
随机推荐
网络不通?服务丢包?这篇 TCP 连接状态详解及故障排查,收好了~
数据库系统原理与应用教程(070)—— MySQL 练习题:操作题 101-109(十四):查询条件练习
Compse编排微服务实战
【pyqt5】自定义控件 实现能够保持长宽比地缩放子控件
小白系统初始化配置资源失败怎么办
MLX90640 红外热成像仪测温模块开发笔记(完整篇)
MLX90640 Infrared Thermal Imager Temperature Measurement Module Development Notes (Complete)
MySQL你到底都加了什么锁?
内网穿透 lanproxy部署
数据库系统原理与应用教程(071)—— MySQL 练习题:操作题 110-120(十五):综合练习
How to install voice pack in Win11?Win11 Voice Pack Installation Tutorial
Write code anytime, anywhere -- deploy your own cloud development environment based on Code-server
The solution to the vtk volume rendering code error (the code can run in vtk7, 8, 9), and the VTK dataset website
Source code analysis of GZIPOutputStream class
MySQL开发技巧——存储过程
How to query database configuration parameters in GBase 8c, such as datestyle.What function or syntax to use?
安全作业7.25
Creo5.0草绘如何绘制正六边形
Redis的内存淘汰策略和过期删除策略的区别是什么
Win11如何开启剪贴板自动复制?Win11开启剪贴板自动复制的方法