【发布时间】:2013-04-06 19:16:28
【问题描述】:
我正在实现一个带有链表的队列,该链表将使用简单的命令在同一个程序中发送和接收数据,我想为队列中的每个数据添加一个计数器,值是新的,待处理或确认。那么我是将它存储在一个数组中还是有其他方式,因为计数器的数量会很大?
#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;
}
【问题讨论】:
-
如果是队列,则使用链表。如果您的计数器非常大并且不能重复使用,也可以使用 long。
-
欢迎来到 Stack Overflow。请尽快阅读FAQ。很难为您提供太多帮助,因为您没有显示任何您正在考虑使用的代码。链表是“侵入式”(指针是添加到列表中的结构的一部分)还是“非侵入式”(列表节点结构包括指向数据的指针)?如果它是侵入性的,则将计数器添加到结构中。如果它是非侵入式的,则从您的描述中不清楚计数器可能适合的位置——甚至计数器实际计数的内容。
-
好的,我会尽量说得更清楚。(虽然我确实阅读了常见问题解答)。我需要一个计数器/指针添加到所使用的结构中,它将根据数据包在 send() 和 receive() 之后的哪个阶段取三个值之一(0 表示 NEW,1 表示 PENDING,2 表示 ACK)。我不不知道的是,如果在我将它添加到结构中之后,我将如何更改它?假设你把它写成 ptr->val = 0 或者你必须把每个计数器放在一个数组中才能做到这一点?
标签: c linked-list queue