1. 程式人生 > >鏈式佇列的基本操作與實現

鏈式佇列的基本操作與實現

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <iostream>

typedef int ElementType;

//定義結點
typedef struct LinkNode{
    ElementType data;
    struct LinkNode* next;
} *StackNode, *QueueNode;
//定義佇列
typedef struct {
    LinkNode *front, *rear;
} LinkQueue;

//初始化佇列
LinkQueue* InitQueue(LinkQueue* L){ printf("初始化佇列\n"); L = (LinkQueue*)malloc(sizeof(LinkQueue)); //L->rear = L->front = NULL; L->front = L->rear = (LinkNode*)malloc(sizeof(LinkNode)); L->front->next = NULL; return L; } //判斷佇列是否為空 bool IsQueueEmpty(LinkQueue* L){ if
(L->front == L->rear){ printf("佇列為空\n"); return false; } return true; } //入隊 LinkQueue* EnQueue(LinkQueue* Queue, ElementType data){ LinkNode* L = (LinkNode*)malloc(sizeof(LinkNode)); L->data = data; L->next = NULL; Queue->rear->next = L; Queue
->rear = L; printf("入隊元素為:%d\n", Queue->rear->data); return Queue; } //出隊 LinkQueue* DeQueue(LinkQueue* L){ if (IsQueueEmpty(L) == false){ printf(":所以不能出隊!\n"); return NULL; } printf("出隊元素是:%d\n", L->front->next->data); //用這一句就夠了 //L->front = L->front->next; //為了嚴謹,用一下語句 LinkNode* node = (LinkNode*)malloc(sizeof(LinkNode)); node = L->front->next; //printf("L->front=%d\n", L->front->data); L->front->next = node->next; //printf("L->front=%d\n", L->front->data); if (L->rear == node) L->front = L->rear; //printf("對頭元素是:%d\n", L->front->next->data); free(node); return L; } // int main(void){ // LinkQueue* Queue; // Queue = InitQueue(Queue); // if (IsQueueEmpty(Queue) == true) // printf("初始化為空成功"); // EnQueue(Queue, 1);EnQueue(Queue, 2); // EnQueue(Queue, 3);EnQueue(Queue, 4);EnQueue(Queue, 5); // DeQueue(Queue);DeQueue(Queue); // DeQueue(Queue);DeQueue(Queue);DeQueue(Queue); // system("pause"); // return 0; // }