关于C语言结构体队列的问题,求大神解答,急。 5
我在程序中定义了三个结构体动态队列:structrequest*request_temp_queue;structrequest*request_r_queue;stru...
我在程序中定义了三个结构体动态队列:
struct request *request_temp_queue;
struct request *request_r_queue;
struct request *request_w_queue;
其中request结构体内容如下:
struct request{
int64_t time; //请求到达的时间,单位为us,这里和通常的习惯不一样,通常的是ms为单位,这里需要有个单位变换过程
unsigned int lsn; //请求的起始地址,逻辑地址
unsigned int size; //请求的大小,既多少个扇区
unsigned int operation; //请求的种类,1为读,0为写
unsigned int* need_distr_flag;
unsigned int complete_lsn_count; //record the count of lsn served by buffer
int distri_flag; // indicate whether this request has been distributed already
int64_t begin_time;
int64_t response_time;
double energy_consumption; //记录该请求的能量消耗,单位为uJ
struct sub_request *subs; //链接到属于该请求的所有子请求
struct request *next_node; //指向下一个请求结构体
};
现在我在struct request *request_r_queue 和 struct request *request_w_queue中分别存放了数据,现在想要将这两个队列中的内容先后放到struct request *request_temp_queue中,请问应该如何用代码实现?
主要是不知道每次将request_r_queue或request_w_queue中的一个值放入request_temp_queue中之后,如何删掉request_r_queue或request_w_queue中的这个值? 展开
struct request *request_temp_queue;
struct request *request_r_queue;
struct request *request_w_queue;
其中request结构体内容如下:
struct request{
int64_t time; //请求到达的时间,单位为us,这里和通常的习惯不一样,通常的是ms为单位,这里需要有个单位变换过程
unsigned int lsn; //请求的起始地址,逻辑地址
unsigned int size; //请求的大小,既多少个扇区
unsigned int operation; //请求的种类,1为读,0为写
unsigned int* need_distr_flag;
unsigned int complete_lsn_count; //record the count of lsn served by buffer
int distri_flag; // indicate whether this request has been distributed already
int64_t begin_time;
int64_t response_time;
double energy_consumption; //记录该请求的能量消耗,单位为uJ
struct sub_request *subs; //链接到属于该请求的所有子请求
struct request *next_node; //指向下一个请求结构体
};
现在我在struct request *request_r_queue 和 struct request *request_w_queue中分别存放了数据,现在想要将这两个队列中的内容先后放到struct request *request_temp_queue中,请问应该如何用代码实现?
主要是不知道每次将request_r_queue或request_w_queue中的一个值放入request_temp_queue中之后,如何删掉request_r_queue或request_w_queue中的这个值? 展开
1个回答
展开全部
问题不大,你可以在struct request结构体中加一个字段flag,如果是request_r_queue的话,这个字段值就设置为1,如果是request_w_queue的话,就给设置为0,最后你在删除的时候,就判断这个标志,如果是1或者0,删除相应的值就好
追问
请问如何删掉request_r_queue或者request_w_queue中队首的元素呢?就是只删掉那个已经放到整合队列里的,单个的元素。
追答
整合进去的话还能判断是队首吗?不是已经根据某些原因把顺序打乱的吗?想要删掉某个节点只能通过数据域或者某个已知字段去删除,除非你在一开始就给个标志,判断当前节点是否是头节点,当然,没啥用,删除不用做得这么细吧
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询