linux queue 用法

本文提供了两个使用TAILQ队列的C语言示例程序。第一个示例展示了如何通过TAILQ队列进行元素的插入和移除操作;第二个示例则演示了如何在TAILQ队列中插入元素,并获取队列中的特定元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Tail queue 使用例子:
test1.c

#include <stdio.h>
#include "queue.h"


#define REPEAT 500
#define NOBJECTS 1000000

// 在程序中如果我们想使用queue.h中提供的东西来
// 简便地将自己的数据存储在队列中,就要定义如下的结构体:
// 结构体中前面几项是自己的数据,最后一项是 TAILQ_ENTRY(..)...
// 当然,如果最后一项根据自己选择的队列类型也可以是
// SLIST_ENTRY或LIST_ENTRY或SIMPLEQ_ENTRY或CIRCLEQ_ENTRY
struct object{
    char anything[7]; // 这里我们自己的数据很简单,是字符数组
    TAILQ_ENTRY(object) tailq_entry;
};



struct object objects[NOBJECTS]; 

TAILQ_HEAD(,object) the_tailq;   // 定义TAILQ队列头(definations)
TAILQ_INIT(&the_tailq);          // 初始化TAILQ队列头(functions)

static void test_tailq(){
    int t;
    puts("Testing TAILQ...");
    for (t = 0; t < REPEAT; t++) {
        int i;

        for (i = 0; i < NOBJECTS; i++) {
            TAILQ_INSERT_TAIL(&the_tailq, objects+i, tailq_entry);
        }
        for (i = 0; i < NOBJECTS; i++) {
            TAILQ_REMOVE_HEAD(&the_tailq, tailq_entry);
        }
    }
}


int main(){

    test_stailq();

    return 0;
}

test2.c

#include <stdio.h>  
#include <stdlib.h>  
#include "queue.h"  
  
struct QUEUE_ITEM{  
    int value;  
    TAILQ_ENTRY(QUEUE_ITEM) entries;  
};  
TAILQ_HEAD(,QUEUE_ITEM) queue_head;  
int main(int argc,char **argv){  
    struct QUEUE_ITEM *item;  
    struct QUEUE_ITEM *tmp_item;  
  
    TAILQ_INIT(&queue_head);  
    int i=0;  
    for(i=5;i<10;i+=2){  
        item=malloc(sizeof(item));  
        item->value=i;  
        TAILQ_INSERT_TAIL(&queue_head, item, entries);  
    }  
      
    struct QUEUE_ITEM *ins_item;  
    ins_item=malloc(sizeof(ins_item));  
  
    ins_item->value=100;  
    TAILQ_INSERT_BEFORE(item,ins_item,entries);  
  
  
    tmp_item=TAILQ_FIRST(&queue_head);  
    printf("first element is %d\n",tmp_item->value);  
  
    tmp_item=TAILQ_NEXT(tmp_item,entries);  
    printf("next element is %d\n",tmp_item->value);  
  
    tmp_item=TAILQ_NEXT(tmp_item,entries);  
    printf("next element is %d\n",tmp_item->value);  
  
    tmp_item=TAILQ_NEXT(tmp_item,entries);  
    printf("next element is %d\n",tmp_item->value);  
  
}  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值