int main(void) { Queue que; char op[5]; QueueInit(&que); /* キューの初期化 */ //キューの中身を確認 if(!QueueIsEmpty(&que)){ printf("初期化失敗\n"); return (-1); } while (1) { int m, no; char name[NAMELEN]; Node *data; printf("Operation:"); printf("(1)データの追加(enqueue),(2)データの削除(dequeue), (0) 終了:"); scanf("%s", op); m=atoi(op); if (m == 0) break; switch(m) { case 1: data = AllocNode(); printf("追加するデータを入力してください。\n"); printf("番号:");scanf("%d", &no); printf("名前:");scanf("%s", name); SetNode(data,no,name,NULL); QueueEnque(&que, data); //キューの中身を確認 if(QueueIsEmpty(&que)){ printf("エンキュー失敗\n"); return (-1); } break; case 2: if(data = QueueDeque(&que)) { puts("デキューしたデータ:"); printf("番号:%d,名前:%s\n", data->no, data->name); // free(data); } else { puts("デキューできません。"); } break; } printf("キューの一覧<%d>:\n", QueueNo(&que)); PrintQueue(&que); } QueueFree(&que); return(0); }
/* * Return an ArchReq to arfind. */ void MessageReturnQueueEntry( struct QueueEntry *qe) { static char arname[ARCHREQ_NAME_SIZE]; struct ArchReq *ar; ar = qe->QeAr; QueueFree(qe); (void) ArchReqName(ar, arname); ar->ArState = ARS_done; (void) ArfindArchreqDone(ar->ArFsname, arname); if (ArchReqDetach(ar) == -1) { Trace(TR_ERR, "ArchReqDetach(%s) failed", arname); } }
void rsort(int arr[], int len) { queue *qs[10]; for (int i = 0; i < 10; i++) qs[i] = QueueNew(); for (int i = 0; i < 3 ; i++) { // 3 digit mods for (int j = 0; j < len; j++) { // array index int tmp = arr[j]; for (int k = 0; k < i; k++) tmp /= 10; // get current digit int index = (tmp % 10); // bucket QueueAdd(qs[index], arr[j]); } rcopy(qs, 10, arr, len); // dump back to array } for (int i = 0; i < 10; i++) QueueFree(qs[i]); }
int main() { Queue q; QueueNew(&q, sizeof(int)); int a = 2; int b = 3; int c = 4; QueueEnter(&q, &a); QueueEnter(&q, &b); QueueEnter(&q, &c); int d, e, f; QueueDelete(&q, &d); printf("%d\n", d); QueueDelete(&q, &e); printf("%d\n", e); QueueDelete(&q, &f); printf("%d\n", f); QueueFree(&q); }