队列是非常easy的。可是用数组实现可能更好点。

(事实上我认为数组在多个队列的时候更难)

然后我是第一次写双向循环链表。指向太乱了。

我这里是依照自己的想法。建立了一个头节点,一个尾节点,然后依照队列顺序正向插入到两个节点之间。输出和弹出队列的时候从后面操作。

以下上代码:

//
// 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)了,所以才用双链表。

队列实现 (双向循环链表 C++)的更多相关文章

  1. C语言通用双向循环链表操作函数集

    说明 相比Linux内核链表宿主结构可有多个链表结构的优点,本函数集侧重封装性和易用性,而灵活性和效率有所降低.     可基于该函数集方便地构造栈或队列集.     本函数集暂未考虑并发保护. 一  ...

  2. (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作

    双向循环链表是基于双向链表的基础上实现的,和双向链表的操作差不多,唯一的区别就是它是个循环的链表,通过每个节点的两个指针把它们扣在一起组成一个环状.所以呢,每个节点都有前驱节点和后继节点(包括头节点和 ...

  3. Linux内核2.6.14源码分析-双向循环链表代码分析(巨详细)

    Linux内核源码分析-链表代码分析 分析人:余旭 分析时间:2005年11月17日星期四 11:40:10 AM 雨 温度:10-11度 编号:1-4 类别:准备工作 Email:yuxu97101 ...

  4. 双向链表、双向循环链表的JS实现

    关于链表简介.单链表.单向循环链表.JS中的使用以及扩充方法:  单链表.循环链表的JS实现 关于四种链表的完整封装: https://github.com/zhuwq585/Data-Structu ...

  5. 双向循环链表的Java版本实现

    1.单项循环列表 单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环.和单链表相比,循环单链表的长处是从链尾到链 ...

  6. c语言编程之双向循环链表

    双向循环链表就是形成两个环,注意每个环的首尾相连基本就可以了. 程序中采用尾插法进行添加节点. #include<stdio.h> #include<stdlib.h> #de ...

  7. Linux内核中的通用双向循环链表

    开发中接触Linux越来越多,休息放松之余,免不了翻看翻看神秘的Linux的内核.看到双向链表时,觉得挺有意思的,此文记下. 作为众多基础数据结构中的一员,双向循环链表在各种“教科书”中的实现是相当的 ...

  8. java与数据结构(4)---java实现双向循环链表

    线性表之链式存储结构双向循环链表 双向循环链表:每个结点包含了数据.直接前驱地址指针和直接后驱地址指针,头结点的直接前驱指向尾结点,尾结点的直接后驱指向头结点,头尾相连构成一个可正可反的圆环.可以形象 ...

  9. 基于visual Studio2013解决算法导论之025双向循环链表

     题目 双向循环链表 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> #in ...

随机推荐

  1. JS断点调试

    断点调试在这种场景下能发挥很大的作用.上手这个办法也利益于我以前玩VB编程时也习惯了IDE的单步/断点调试,一般的纯Web开发入门的程序员我没看到几个会用的.其实难度不大,只是他们不懂得主动去探索 首 ...

  2. FTP服务器需要开几个端口

    原文: https://blog.csdn.net/houbin0912/article/details/72578688 -------------------------------------- ...

  3. 经典算法——Jump Game(II)

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  4. What most young programmers need to learn

    In the past 7.5 years I have supervised over a dozen programming interns at Ronimo and have seen hun ...

  5. java 线程的几种状态(转载)

      java thread的运行周期中, 有几种状态, 在 java.lang.Thread.State 中有详细定义和说明: NEW 状态是指线程刚创建, 尚未启动 RUNNABLE 状态是线程正在 ...

  6. hdu3415 Max Sum of Max-K-sub-sequence 单调队列

    //hdu3415 Max Sum of Max-K-sub-sequence //单调队列 //首先想到了预处理出前缀和利用s[i] - s[j]表示(j,i]段的和 //之后的问题就转换成了求一个 ...

  7. java类反射

    http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html

  8. ajax请求web容器控制超时

    1.项目用到超时控制,针对ajax请求超时,可以参照如下解决方案 tomcat容器 web.xml 中配置 <session-config> <session-timeout> ...

  9. Filter介绍,运行顺序,实例

    Filter介绍 Filter可觉得是Servlet的一种"变种",它主要用于对用户请求进行预处理,也能够对HttpServletResponse进行后处理,是个典型的处理链. 它 ...

  10. Rabbitmq消息队列(二) Hello World! 模拟简单发送接收

    1.简介 RabbitMQ是消息代理:它接受和转发消息.你可以把它当作一个邮局:当你把你要邮寄的邮件放在信箱里时,你可以肯定Postman先生最终会把邮件送到你的收件人那里.在这个比喻中,Rabbit ...