队列实现 (双向循环链表 C++)
2014-07-28 23:48
543 查看
队列是很简单的,但是用数组实现可能更好点。。(其实我觉得数组在多个队列的时候更难)
然后我是第一次写双向循环链表。指向太乱了。
我这里是按照自己的想法,建立了一个头节点,一个尾节点,然后按照队列顺序正向插入到两个节点之间。输出和弹出队列的时候从后面操作。
下面上代码:
这个代码比较乱 = = ,多包涵了,我以后想想简单点的方法实现。其实单链表也可以,但是那样操作就不是O(1)了,所以才用双链表。
然后我是第一次写双向循环链表。指向太乱了。
我这里是按照自己的想法,建立了一个头节点,一个尾节点,然后按照队列顺序正向插入到两个节点之间。输出和弹出队列的时候从后面操作。
下面上代码:
// // main.cpp // queue // // Created by Alps on 14-7-28. // Copyright (c) 2014年 chen. All rights reserved. // #include <iostream> #define ElementType int using namespace std; struct Node; typedef Node* PtrToNode; typedef PtrToNode Queue; struct Node{ ElementType X; PtrToNode Pre; PtrToNode Next; }; Queue createQueue(void){ Queue Q; Queue Q2; Q2 = (Queue)malloc(sizeof(Node)); Q = (Queue)malloc(sizeof(Node)); Q->X = 0; Q->Next = Q2; Q->Pre = Q2; Q2->Next = Q; Q2->Pre = Q; return Q; } int isEmpty(Queue Q){ return Q->Next->Next == Q; } void intoQueue(Queue Q, ElementType element){ Queue tmp; Queue tmp1; tmp1 = (Queue)malloc(sizeof(Node)); // Queue switchTmp; tmp = (Queue)malloc(sizeof(Node)); tmp->X = element; tmp->Next = Q->Next; Q->Next->Pre = tmp; Q->Next = tmp; tmp->Pre = Q; } void outQueue(Queue Q){ Queue tmp; tmp = Q->Pre->Pre; Q->Pre->Pre = tmp->Pre; tmp->Pre->Next = Q->Pre; free(tmp); } ElementType headQueue(Queue Q){ if (Q == NULL) { printf("please create queue first!\n"); return 0; } if (!isEmpty(Q)) { return Q->Pre->Pre->X; }else{ printf("The queue is empty!\n"); return 0; } } int makeEmpty(Queue Q){ if (Q == NULL) { printf("please create queue first!\n"); return -1; } while (!isEmpty(Q)) { outQueue(Q); } return 0; } void Print(Queue Q){ if (!isEmpty(Q)) { Queue tmp = Q->Pre->Pre; while (tmp != Q) { printf("%d ",tmp->X); tmp = tmp->Pre; } printf("\n"); } } int main(int argc, const char * argv[]) { Queue Q = createQueue(); if (isEmpty(Q)) { printf("The queue is empty !\n"); }else{ printf("The queue is not empty!\n"); } intoQueue(Q, 2); intoQueue(Q, 4); intoQueue(Q, 6); Print(Q); outQueue(Q); Print(Q); makeEmpty(Q); Print(Q); // printf("%d\n",headQueue(Q)); return 0; }
这个代码比较乱 = = ,多包涵了,我以后想想简单点的方法实现。其实单链表也可以,但是那样操作就不是O(1)了,所以才用双链表。
相关文章推荐
- 队列(queue)的链表(list)实现及循环数组(circular array)实现 C++实现
- 双向循环链表的实现
- 循环队列模版(链表实现)
- 仅用一个指针域,实现双向循环链表
- 双向循环链表-栈-队列 (list大杂烩~会模版就好咯)
- 双向循环链表删除算法的C++程序实现
- 队列(queue)的链表(list)实现及循环数组(circular array)实现 C++实现
- Linux双向循环链表的实现
- 链表的C语言实现之循环链表及双向链表
- 链表的C语言实现之循环链表及双向链表
- 一个简单的双向循环链表的实现
- 链表的C语言实现之循环链表及双向链表
- 双向循环链表中结点类,链表类的定义与实现。
- 数据结构的C实现_双向循环链表
- C语言 双向循环链表的实现和结构 链表 线性表的链式实现
- C实现循环链表及双向链表
- 链表的C语言实现之循环链表及双向链表
- 双向循环链表的C语言实现
- C++类模板 实现双向循环链表的基本算法 《数据结构》(C++版 北京科海)中摘抄
- C语言实现双向循环链表[下]