Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct st_cell {
- int data;
- struct st_cell *next;
- } CELL;
- // 待ち行列の末尾にセルを追加する関数
- // head : 待ち行列の先頭へのポインタ
- // tail : 待ち行列の末尾へのポインタ
- // data : セルに格納するデータ
- void enqueue(CELL *head, CELL *tail, int data) {
- CELL *cell = (CELL *) malloc(sizeof(CELL));
- cell->data = data;
- if (head->next == NULL) {
- cell->next = NULL;
- head->next = cell;
- } else {
- tail->next->next = cell;
- }
- tail->next = cell;
- }
- // 待ち行列の先頭のセルを削除する関数
- // head : 待ち行列の先頭へのポインタ
- // tail : 待ち行列の末尾へのポインタ
- // 戻り値 : 先頭のセルに格納されていたデータ
- int dequeue(CELL *head, CELL *tail) {
- CELL *tmp;
- int data;
- data = head->next->data;
- tmp = head->next;
- head->next = head->next->next;
- free(tmp);
- return data;
- }
- // 待ち行列に残っているすべてのセルを削除する関数
- // head : 待ち行列の先頭へのポインタ
- void clear(CELL *head) {
- CELL *tmp;
- while (head->next != NULL) {
- tmp = head->next;
- head->next = head->next->next;
- free(tmp);
- }
- }
- void puts_queue(CELL *head) {
- CELL *p;
- printf("[");
- for (p = head->next; p; p = p->next) {
- printf("%d", p->data);
- if (p->next) printf(", ");
- }
- printf("]\n");
- }
- int main(void) {
- int i;
- CELL head, tail;
- head.next = NULL;
- tail.next = NULL;
- puts_queue(&head);
- for (i = 0; i < 5; i++) {
- enqueue(&head, &tail, i);
- puts_queue(&head);
- }
- i = dequeue(&head, &tail); printf("%d: ", i); puts_queue(&head);
- clear(&head); puts_queue(&head);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement