gpt4 book ai didi

c - C 中带有链表和计数器的队列

转载 作者:行者123 更新时间:2023-11-30 15:50:15 25 4
gpt4 key购买 nike

我正在实现一个带有链表的队列,该队列将使用简单的命令在同一程序中发送和接收数据,我想为队列中的每个数据添加一个计数器,值是新的、待处理的或确认。那么我应该将其存储在数组中还是有其他方式,因为计数器的数量会很大?

#define TOTALPACKETS 100
#define WINDOW 5
#define ACK 2
#define PENDING 1
#define NEW 0


typedef int Item ;
typedef struct node *link;
struct node{
Item data;
Item status;
link next;
};

int QUEUEempty(link head){
return head==NULL;
}

void QUEUEput(link *head, link *tail, Item data, Item status){
if (*head==NULL){
(*tail)=(link)malloc(sizeof(node));
(*tail)->data=data;
(*tail)->next=NULL;
(*tail)->status=NEW;
*head=*tail;
return;}
(*tail)->next=(link)malloc(sizeof(node));
*tail=(*tail)->next;
(*tail)->data=data;
(*tail)->next=NULL;
(*tail)->status=NEW;
return;
}

Item QUEUEget(link *head){
Item data=(*head)->data;
Item status
link t=*head;
*head=(*head)->next;
free(t);
return data;
}

最佳答案

我喜欢认为我相当擅长阅读字里行间并揣测隐藏的意图,但我无法很好地了解你想要什么。我会把它写成评论,除非评论里的字数太多,而且格式也很有限。 (这并不是一个真正的答案——这就是为什么它是 CW。)

您谈论的“计数器”具有三个值之一(NEW、PENDING、ACK)。这听起来更像是一种状态或状态,而不是计数器。

让我们尝试一些设计;你可以说出哪里出了问题。这假设采用非侵入式队列设计。

typedef struct Data Data;   /* This is the data that you're queueing - details TBS */

typedef struct QNode
{
Data *data;
QNode *next;
QNode *prev;
...possibly other data...status?
} QNode;

typedef struct Queue
{
QNode *head;
QNode *tail;
...possibly other data...counts?
} Queue;

extern int q_add(Queue *q, Data *d); // Add datum d to queue per policy
extern int q_next(Queue *q, Data **dp); // Remove next datum from queue per policy

现在,基于此概要的系统至少可以在两个位置存储计数器或状态。其中一个位置位于 struct Data 内,这是一种尚不透明的结构类型。另一个可能的地方是在 struct QNode 内。如果您想要的话,您也可以使用 struct Queue 中的摘要计数器来监视处于每种状态的节点数量。

以此为起点,你追求什么?此时一切都在变化 - 但如果没有具体的东西可以进行,我们无法提供更多帮助。

关于c - C 中带有链表和计数器的队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15854983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com