• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > c语言尾队列tailq使用示例分享

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了tailq,tailq entry,tailq insert tail,tailq first,tailq init等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

queue和list的结构定义和操作都在'sys/queue.h'中完成, 主要定义了下面四种数据结构:

1单向列表(single-linked lists)
2单向尾队列(single-linked tail queue)
3列表(lists)
4尾队列(tail queues)



使用示例

/*
  定义一个结构体,它只是尾队列的一个元素
  它必须包含一个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;

}
</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

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

相关文章

  • 2017-05-28C语言冒泡排序法心得
  • 2017-05-28Linux 软件看门狗 watchdog使用介绍
  • 2017-05-285分钟内了解C语言的指针
  • 2017-05-28c语言生成随机uuid编码示例
  • 2017-05-28C语言实现查询自动售货机中的商品价格【实例分享】
  • 2017-05-28解决C++ 无法从void 转换为LRESULT的方法详解
  • 2017-05-28win32 api实现简单的消息窗口示例
  • 2017-05-28C语言中字符串常用函数strcat与strcpy的用法介绍
  • 2017-05-28win32使用openfilename浏览文件窗口示例
  • 2017-05-28C/C++动态分配与释放内存的区别详细解析

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 用C语言获取文件的大小示例分享
    • c++版线程池和任务池示例
    • gdb调试命令的使用及总结
    • 浅析c与c++中struct的区别
    • c语言clock函数使用示例
    • C++ Vector用法详解
    • 详解C语言中的常量指针和指针常量
    • 求子数组最大和的实例代码
    • C++遍历文件夹下文件的方法
    • C语言中qsort函数用法实例小结

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有