鏈式佇列的基本操作與實現
阿新 • • 發佈:2019-02-12
#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;
// }