2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
1:結(jié)構(gòu)
typedef struct {GList *head;GList *tail;guint length;} GQueue; 2:原型
GQueue* g_queue_new (void);void g_queue_free (GQueue *queue);#define G_QUEUE_INITvoid g_queue_init (GQueue *queue);void g_queue_clear (GQueue *queue);gboolean g_queue_is_empty (GQueue *queue);guint g_queue_get_length (GQueue *queue);void g_queue_reverse (GQueue *queue);GQueue* g_queue_copy (GQueue *queue);void g_queue_foreach (GQueue *queue,GFunc func,gpointer user_data);GList* g_queue_find (GQueue *queue,gconstpointer data);GList* g_queue_find_custom (GQueue *queue,gconstpointer data,GCompareFunc func);void g_queue_sort (GQueue *queue,GCompareDataFunc compare_func,gpointer user_data);void g_queue_push_head (GQueue *queue,gpointer data);void g_queue_push_tail (GQueue *queue,gpointer data);void g_queue_push_nth (GQueue *queue,gpointer data,gint n);gpointer g_queue_pop_head (GQueue *queue);gpointer g_queue_pop_tail (GQueue *queue);gpointer g_queue_pop_nth (GQueue *queue,guint n);gpointer g_queue_peek_head (GQueue *queue);gpointer g_queue_peek_tail (GQueue *queue);gpointer g_queue_peek_nth (GQueue *queue,guint n);gint g_queue_index (GQueue *queue,gconstpointer data);void g_queue_remove (GQueue *queue,gconstpointer data);void g_queue_remove_all (GQueue *queue,gconstpointer data);void g_queue_insert_before (GQueue *queue,GList *sibling,gpointer data);void g_queue_insert_after (GQueue *queue,GList *sibling,gpointer data);void g_queue_insert_sorted (GQueue *queue,gpointer data,GCompareDataFunc func,gpointer user_data);void g_queue_push_head_link (GQueue *queue,GList *link_);void g_queue_push_tail_link (GQueue *queue,GList *link_);void g_queue_push_nth_link (GQueue *queue,gint n,GList *link_);GList* g_queue_pop_head_link (GQueue *queue);GList* g_queue_pop_tail_link (GQueue *queue);GList* g_queue_pop_nth_link (GQueue *queue,guint n);GList* g_queue_peek_head_link (GQueue *queue);GList* g_queue_peek_tail_link (GQueue *queue);GList* g_queue_peek_nth_link (GQueue *queue,guint n);gint g_queue_link_index (GQueue *queue,GList *link_);void g_queue_unlink (GQueue *queue,GList *link_);void g_queue_delete_link (GQueue *queue,GList *link_); 3:實例
#include <stdio.h>#include <glib.h>#include <glib/gprintf.h>struct map {int key;char *value;} m[10] = {{0,"zero"},{1,"one"},{2,"two"},{3,"three"},{4,"four"},{5,"five"},{6,"six"},{7,"seven"},{8,"eight"},{9,"nine"},};typedef struct map map;static voidmyPrintInt(gpointer p1, gpointer fmt){g_printf(fmt, *(gint *)p1);}static voidmyPrintStr(gpointer p1, gpointer fmt){g_printf(fmt, (gchar *)p1);}static voidtest_queue_1(void){// GQueue* g_queue_new(void);GQueue *queue = g_queue_new();// gboolean g_queue_is_empty(GQueue *queue);gboolean b = g_queue_is_empty(queue);g_printf("The queue should be empty now.\t\tResult: %s.\n", b ? "YES" : "NO");// void g_queue_push_tail(GQueue *queue, gpointer data);gint i;for (i = 0; i < sizeof (m) / sizeof (m[0]); i++)g_queue_push_tail(queue, m[i].value);// void g_queue_foreach(GQueue *queue, GFunc func, gpointer user_data);g_printf("Now the queue[after push tail] :\n");g_queue_foreach(queue, myPrintStr, "%s, ");g_printf("\n");// guint g_queue_get_length(GQueue *queue);g_printf("The lenght should be '%d' now.\t\tResult: %d.\n", 10, g_queue_get_length(queue));// void g_queue_reverse(GQueue *queue);g_queue_reverse(queue);g_printf("Now the queue[after reverse] :\n");g_queue_foreach(queue, myPrintStr, "%s, ");g_printf("\n");// gpointer g_queue_pop_head(GQueue *queue);g_printf("The head should be '%s' now.\t\tResult: %s.\n", "nine", (gchar *)g_queue_pop_head(queue));// gpointer g_queue_pop_tail(GQueue *queue);g_printf("The tail should be '%s' now.\t\tResult: %s.\n", "zero", (gchar *)g_queue_pop_tail(queue));g_printf("Now the queue[after pop head and tail] :\n");g_queue_foreach(queue, myPrintStr, "%s, ");g_printf("\n");// gpointer g_queue_pop_nth(GQueue *queue, guint n);g_printf("The head should be '%s' now.\t\tResult: %s.\n", "eight", (gchar *)g_queue_pop_nth(queue, 0));// void g_queue_push_head(GQueue *queue, gpointer data);g_queue_push_head(queue, "zero");g_queue_push_head(queue, "eight");// void g_queue_push_nth(GQueue *queue, gpointer data, gint n);g_queue_push_nth(queue, "nine", 2);g_printf("Now the queue[after push 'zero' 'eight' 'nine'] :\n");g_queue_foreach(queue, myPrintStr, "%s, ");g_printf("\n");// gpointer g_queue_peek_head(GQueue *queue);g_printf("The head should be '%s' now.\t\tResult: %s.\n", "eight", (gchar *)g_queue_peek_head(queue));// gpointer g_queue_peek_tail(GQueue *queue);g_printf("The tail should be '%s' now.\t\tResult: %s.\n", "zero", (gchar *)g_queue_peek_tail(queue));// gpointer g_queue_peek_nth(GQueue *queue, guint n);g_printf("The head should be '%s' now.\t\tResult: %s.\n", "eight", (gchar *)g_queue_peek_nth(queue, 0));/*// void g_queue_clear(GQueue *queue);g_queue_clear(queue);g_printf("Now the queue[after clear] :\n");g_queue_foreach(queue, myPrintStr, "%s, ");g_printf("\n");*/// void g_queue_free(GQueue *queue);g_queue_free(queue);}static gintsort(gconstpointer p1, gconstpointer p2, gpointer user_data){gint32 a, b;a = *(gint*)(p1);b = *(gint*)(p2);return (a > b ? +1 : a == b ? 0 : -1);}static gintmyCompareInt(gconstpointer p1, gconstpointer p2){const int *a = p1;const int *b = p2;return *a - *b;}static gintsort_r(gconstpointer p1, gconstpointer p2, gpointer user_data){gint32 a, b;a = *(gint*)(p1);b = *(gint*)(p2);return (a < b ? +1 : a == b ? 0 : -1);}static voidtest_queue_2(void){GQueue *queue = NULL;/*// void g_queue_init(GQueue *queue);g_queue_init(queue);*/queue = g_queue_new();// void g_queue_insert_sorted(GQueue *queue, gpointer data, GCompareDataFunc func gpointer user_data);gint i;for (i = 0; i < sizeof (m) / sizeof (m[0]); i++)g_queue_insert_sorted(queue, &m[i].key, sort_r, NULL);g_printf("Now the queue[after insert sorted] :\n");for (i = 0; i < queue->length; i++)g_printf("%d, ", *(gint *)g_queue_peek_nth(queue, i));g_printf("\n");// void g_queue_remove(GQueue *queue, gconstpointer data);g_queue_remove(queue, &m[3].key);g_printf("Now the queue[after remove '%d'] :\n", m[3].key);for (i = 0; i < queue->length; i++)g_printf("%d, ", *(gint *)g_queue_peek_nth(queue, i));g_printf("\n");// GList* g_queue_find_custom(GQueue *queue, gconstpointer data, GCompareFunc func);// void g_queue_insert_before(GQueue *queue, GList *sibling, gpointer data);// void g_queue_insert_after(GQueue *queue, GList *sibling, gpointer data);g_queue_insert_before(queue, g_queue_find_custom(queue, &m[5].key, myCompareInt), &m[3].key);g_queue_insert_after(queue, g_queue_find_custom(queue, &m[5].key, myCompareInt), &m[3].key);g_printf("Now the queue[after insert '%d' around '%d'] :\n", m[3].key, m[5].key);g_queue_foreach(queue, myPrintInt, "%d, ");g_printf("\n");// void g_queue_sort(GQueue *queue, GCompareDataFunc compare, gpointer user_data);g_queue_sort(queue, sort, NULL);g_printf("Now the queue[sorted] :\n");g_queue_foreach(queue, myPrintInt, "%d, ");g_printf("\n");// GQueue* g_queue_copy(GQueue *queue);GQueue *q = g_queue_copy(queue);g_printf("Now the queue[copy] :\n");g_queue_foreach(q, myPrintInt, "%d, ");g_printf("\n");// void g_queue_remove_all(GQueue *queue, gconstpointer data);g_queue_remove_all(q, &m[3].key);g_printf("Now the queue[remove '%d'] :\n", m[3].key);g_queue_foreach(q, myPrintInt, "%d, ");g_printf("\n");g_queue_free(q);g_queue_free(queue);}intmain(void){printf("BEGIN:\n************************************************************\n");printf("\n------------------------------------------------------------\ntest_queue_1:\n");test_queue_1();printf("------------------------------------------------------------\n");printf("\n------------------------------------------------------------\ntest_queue_2:\n");test_queue_2();printf("------------------------------------------------------------\n");printf("\n************************************************************\nDONE\n");return 0;} 4:結(jié)果
[xied1@soho use]$ gcc `pkg-config --cflags --libs glib-2.0` -Wall -O2 -o queue queue.c[xied1@soho use]$ ./queueBEGIN:************************************************************------------------------------------------------------------test_queue_1:The queue should be empty now. Result: YES.Now the queue[after push tail] :zero, one, two, three, four, five, six, seven, eight, nine,The lenght should be '10' now. Result: 10.Now the queue[after reverse] :nine, eight, seven, six, five, four, three, two, one, zero,The head should be 'nine' now. Result: nine.The tail should be 'zero' now. Result: zero.Now the queue[after pop head and tail] :eight, seven, six, five, four, three, two, one,The head should be 'eight' now. Result: eight.Now the queue[after push 'zero' 'eight' 'nine'] :eight, zero, nine, seven, six, five, four, three, two, one,The head should be 'eight' now. Result: eight.The tail should be 'zero' now. Result: one.The head should be 'eight' now. Result: eight.------------------------------------------------------------------------------------------------------------------------test_queue_2:Now the queue[after insert sorted] :9, 8, 7, 6, 5, 4, 3, 2, 1, 0,Now the queue[after remove '3'] :9, 8, 7, 6, 5, 4, 2, 1, 0,Now the queue[after insert '3' around '5'] :9, 8, 7, 6, 3, 5, 3, 4, 2, 1, 0,Now the queue[sorted] :0, 1, 2, 3, 3, 4, 5, 6, 7, 8, 9,Now the queue[copy] :0, 1, 2, 3, 3, 4, 5, 6, 7, 8, 9,Now the queue[remove '3'] :0, 1, 2, 4, 5, 6, 7, 8, 9,------------------------------------------------------------************************************************************DONE
5:小結(jié)
- 創(chuàng)建: g_queue_new()
- 入隊: g_queue_push_head() g_queue_push_tail()
- 出隊: g_queue_pop_head() g_queue_pop_tail()
- 銷毀: g_queue_free()
轉(zhuǎn)載于:https://my.oschina.net/iamhere/blog/493150
總結(jié)
以上是生活随笔為你收集整理的Glib实例学习(6)双端队列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。