c語言尾隊列tailq使用樣本分享_C 語言

來源:互聯網
上載者:User

queue和list的結構定義和操作都在'sys/queue.h'中完成, 主要定義了下面四種資料結構:

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



使用樣本

複製代碼 代碼如下:

#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;

}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.