日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

优先队列的链表实现

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 优先队列的链表实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
插入時需要按照優先級從高到低排序,一般操作系統的任務隊列調度會用到 /* 優先隊列(鏈表實現) * front 為隊頭指針(鏈表頭節點) * rear 為隊尾指針 */ #include<stdio.h> #include<stdlib.h> typedef struct list_t{ int _element; int _priority; struct list_t *_next; }list_t; /* 要改變一個變量的值,需要傳入變量的地址作參數; * 要改變一個指針的值,需要傳入該指針的地址作參數(即指針的指針); */ void insertPriorQueue(list_t **front, list_t **rear, int value, int priority) { list_t *prev; list_t *curr; curr = (list_t*)malloc(sizeof(list_t)); if(curr == NULL) { printf("error: malloc\n"); exit(0); } curr->_element = value; curr->_priority = priority; curr->_next = NULL; if(*rear == NULL) { //empty queue: we need make front = rear = NULL *rear = curr; *front = *rear; } else { /* if node to be inserted has highest priority hence should be the first node */ if((*front)->_priority < priority) { curr->_next = *front; *front = curr; } /* if node has the lowest priority hence should be inserted the last node */ else if ((*rear)->_priority > priority) { (*rear)->_next = curr; *rear = curr; } /* find the proper place to insert */ else { prev = *front; while((prev->_next)->_priority >= priority) prev = prev->_next; curr->_next = prev->_next; prev->_next = curr; } } } void delPriorQueue(list_t **front, list_t **rear, int *value) { list_t *temp; if((*front == *rear) && (*rear == NULL)) { printf("Queue underflow\n"); exit(0); } *value = (*front)->_element; temp = *front; *front = (*front)->_next; if(*rear == temp) *rear = (*rear)->_next; printf("%d(%d)\n", temp->_element, temp->_priority); free(temp); } void printPriorQueue(list_t *head) { while(head != NULL) { printf("%d", head->_element); printf("(%d) ", head->_priority); head = head->_next; } putchar('\n'); } void item() { printf("*************** Welcome to the Queue *************\n"); printf("1: Insert one element;\n"); printf("2: Delete one element;\n"); printf("0: Exit.\n"); printf("*************************************************\n"); printf("Select your operation: "); } main(void) { char item_choice; list_t *front = NULL; list_t *rear = NULL; int n, priority; item(); while(1) { item_choice = getchar(); switch (item_choice) { case '1': printf("Insert a element to the queue: "); scanf("%d %d", &n, &priority); insertPriorQueue(&front, &rear, n, priority); printf("\nQueue: "); printPriorQueue(front); putchar('\n'); item(); break; case '2': printf("Get an element from the queue: "); delPriorQueue(&front, &rear, &n); //printf("Element: %d\n", n); printf("Queue: "); printPriorQueue(front); putchar('\n'); item(); break; case '0': printf("Good luck to you!\n"); return 0; } } return; }

總結

以上是生活随笔為你收集整理的优先队列的链表实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。