双向队列的链表实现
2015-11-01 10:13
453 查看
定义以下这样一个队列结构:
其中CreateDeque用来创建一个带有头节点的双向队列,并且队列的Front和Rear两个指针均指向那个头节点
Push用来在队列前端插入数据
Pop用于在前端弹出数据并返回数据
Inject用于在队列后端插入数据
Eject用于在后端弹出数据并返回数据
具体实现如下:
需要注意的是Front始终指向头节点,并且用Front与Rear是否均指向头节点来判断队列是否为空
#include <stdio.h> #include <stdlib.h> #define ElementType int #define ERROR 1e5 typedef struct Node *PtrToNode; struct Node { ElementType Element; PtrToNode Next, Last; }; typedef struct DequeRecord *Deque; struct DequeRecord { PtrToNode Front, Rear; }; Deque CreateDeque(); int Push( ElementType X, Deque D ); ElementType Pop( Deque D ); int Inject( ElementType X, Deque D ); ElementType Eject( Deque D );
其中CreateDeque用来创建一个带有头节点的双向队列,并且队列的Front和Rear两个指针均指向那个头节点
Push用来在队列前端插入数据
Pop用于在前端弹出数据并返回数据
Inject用于在队列后端插入数据
Eject用于在后端弹出数据并返回数据
具体实现如下:
需要注意的是Front始终指向头节点,并且用Front与Rear是否均指向头节点来判断队列是否为空
Deque CreateDeque() { Deque D = malloc(sizeof(struct DequeRecord)); PtrToNode p = malloc(sizeof(struct Node)); p->Last = p->Next = NULL; D->Front = D->Rear = p; return D; } int Push( ElementType X, Deque D ) { PtrToNode p = malloc(sizeof(struct Node)); if(p == NULL) return 0; p->Element = X; p->Next = D->Front->Next; p->Last = D->Front; D->Front->Next = p; if(p->Next == NULL) D->Rear = p; else p->Next->Last = p; return 1; } ElementType Pop( Deque D ) { if(D->Front == D->Rear) return ERROR; ElementType result = D->Front->Next->Element; PtrToNode temp = D->Front->Next; if(temp == D->Rear) D->Rear = D->Front; else temp->Next->Last = temp->Last; D->Front->Next = temp->Next; return result; } int Inject( ElementType X, Deque D ) { PtrToNode p = malloc(sizeof(struct Node)); if(p == NULL) return 0; p->Element = X; D->Rear->Next = p; p->Next = NULL; p->Last = D->Rear; D->Rear = p; return 1; } ElementType Eject( Deque D ) { if(D->Front == D->Rear) return ERROR; ElementType result = D->Rear->Element; PtrToNode temp = D->Rear; D->Rear->Last->Next = NULL; D->Rear = D->Rear->Last; return result; }
相关文章推荐
- 【HDU5523 BC61 div1 A】Game 一行n个数从st到ed每点走一次
- PE文件格式
- AlarmManager(全局定时器/闹钟)详解
- 信息安全系统设计基础第八周期中总结
- Python图片与其矩阵数据互相转换
- USACO2008 Feb T1连线游戏
- 第9周项目3-稀疏矩阵的三元组表示的实现及应用(1)
- 【HDU5522 BC61 div2 A】【暴力orSET】Numbers 是否存在x+y=z
- 图像处理(卷积)
- 【android】listview与adapter用法
- codeforces 592B The Monster and the Squirrel
- 职业生涯:国内 vs. 国外
- S3C2440芯片手册翻译_1
- 打字指法——双手
- lighttpd配置虚拟主机/php等WEB环境
- 常用设计模式(二)
- STL中常用的c++语法
- 初学者如何快速练习盲打
- 天声人語 20151101 ハロウィーン日本流
- Android Api Demos登顶之路(112)Views-->SystemUiVisibility