源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

c语言尾队列tailq使用示例分享

  • 时间:2021-02-04 05:54 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:c语言尾队列tailq使用示例分享
queue和list的结构定义和操作都在'sys/queue.h'中完成, 主要定义了下面四种数据结构: 1单向列表(single-linked lists) 2单向尾队列(single-linked tail queue) 3列表(lists) 4尾队列(tail queues) [img]http://files.jb51.net/file_images/article/201401/20140128114543.jpg?201402811474[/img] [img]http://files.jb51.net/file_images/article/201401/20140128114556.jpg?2014028114736[/img] 使用示例
[u]复制代码[/u] 代码如下:
#include <stdio.h> #include <stdlib.h> #include <sys/queue.h> /*   定义一个结构体,它只是尾队列的一个元素   它必须包含一个TAILQ_ENTRY来指向上一个和下一个元素 */ struct tailq_entry {  int value;  TAILQ_ENTRY(tailq_entry) entries; }; //定义队列的头部 TAILQ_HEAD(, tailq_entry) my_tailq_head; int main(int argc, char  *argv[]) {  //定义一个结构体指针  struct tailq_entry *item;  //定义另外一个指针  struct tailq_entry *tmp_item;  //初始化队列  TAILQ_INIT(&my_tailq_head);  int i;  //在队列里添加10个元素  for(i=0; i<10; i++) {   //申请内存空间   item = malloc(sizeof(*item));   if (item == NULL) {    perror("malloc failed");    exit(-1);   }   //设置值   item->value = i;   /*      将元素加到队列尾部      参数1:指向队列头的指针      参数2:要添加的元素      参数3:结构体的变量名   */   TAILQ_INSERT_TAIL(&my_tailq_head, item, entries);  }  //遍历队列  printf("Forward traversal: ");  TAILQ_FOREACH(item, &my_tailq_head, entries) {   printf("%d ",item->value);  }  printf("\n");  //添加一个新的元素  printf("Adding new item after 5: ");  TAILQ_FOREACH(item, &my_tailq_head, entries) {   if (item->value == 5) {    struct tailq_entry *new_item = malloc(sizeof(*new_item));    if (new_item == NULL) {     perror("malloc failed");     exit(EXIT_FAILURE);    }    new_item->value = 10;    //插入一个元素    TAILQ_INSERT_AFTER(&my_tailq_head, item, new_item, entries);    break;   }  }  TAILQ_FOREACH(item, &my_tailq_head, entries) {   printf("%d ", item->value);  }  printf("\n");  //删除一个元素  printf("Deleting item with value 3: ");  for(item = TAILQ_FIRST(&my_tailq_head); item != NULL; item = tmp_item) {   if (item->value == 3) {    //删除一个元素    TAILQ_REMOVE(&my_tailq_head, item, entries);    //释放不需要的内存单元    free(item);    break;   }   tmp_item = TAILQ_NEXT(item, entries);  }  TAILQ_FOREACH(item, &my_tailq_head, entries) {   printf("%d ", item->value);  }  printf("\n");  //清空队列  while (item = TAILQ_FIRST(&my_tailq_head)) {   TAILQ_REMOVE(&my_tailq_head, item, entries);   free(item);  }  //查看是否为空  if (!TAILQ_EMPTY(&my_tailq_head)) {   printf("tail queue is  NOT empty!\n");  }  return 0; }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部