您的位置:首页 > 理论基础 > 数据结构算法

链式队列的基本操作与实现

2017-11-02 13:46 441 查看
#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;
// }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息