1. 程式人生 > >C語言指標實現簡單佇列

C語言指標實現簡單佇列

節點結構體:

typedef struct _node
{
    int data;
    struct _node *next;
} Node;

佇列結構體:

typedef struct linkedlist
{
    Node *head;
    Node *tail;
} Queue;

操作:

//初始化佇列
void initializeQueue(Queue *queue)
{
    queue->head = NULL;
    queue->tail = NULL;
}

//入隊
void enQueue(Queue *queue, int data
) { Node *node = (Node *) malloc(sizeof(Node)); node->data = data; if (queue->head == NULL) { node->next = NULL; queue->tail = node; } else { node->next = queue->head; } queue->head = node; } //出隊 int deQueue(Queue *queue
) { Node *tmp = queue->head; int data; //1.只有一個元素 //2.多個元素 // a.遍歷到tail上一個tmp // b.儲存tail的值並free tail所指向的記憶體 // c.tail指向tmp if (queue->head == NULL) { data = -1; } else if (queue->head == queue->tail) { data = tmp->data; queue
->head = queue->tail = NULL; free(tmp); } else { while (tmp->next != queue->tail) { tmp = tmp->next; } data = queue->tail->data; free(queue->tail); queue->tail = tmp; queue->tail->next = NULL; // queue->tail = tmp; // tmp = tmp->next; // queue->tail->next = NULL; // data = tmp->data; // free(tmp); } return data; } void freeAll(Queue *queue) { while(deQueue(queue) != -1); printf("\nFree Complete!\n"); return; } void endl() { printf("\n"); } int main() { Queue queue; initializeQueue(&queue); enQueue(&queue, 1); enQueue(&queue, 2); enQueue(&queue, 3); enQueue(&queue, 4); enQueue(&queue, 5); printf("%d\n", queue.tail->data); printf("%d ", deQueue(&queue)); printf("%d ", deQueue(&queue)); //1 2 // queue : 3 4 5 endl(); enQueue(&queue, 10); enQueue(&queue, 56); enQueue(&queue, 999); //queue: 3 4 5 10 56 999 printf("%d ", deQueue(&queue)); printf("%d ", deQueue(&queue)); printf("%d ", deQueue(&queue)); printf("%d ", deQueue(&queue)); printf("%d ", deQueue(&queue)); printf("%d ", deQueue(&queue)); printf("%d ", deQueue(&queue)); freeAll(&queue); return 0; }

小結:佇列實現基於連結串列,enQueue入隊操作基於addHead