队列实现 (双向循环链表 C++)
队列是非常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++)的更多相关文章
- C语言通用双向循环链表操作函数集
说明 相比Linux内核链表宿主结构可有多个链表结构的优点,本函数集侧重封装性和易用性,而灵活性和效率有所降低. 可基于该函数集方便地构造栈或队列集. 本函数集暂未考虑并发保护. 一 ...
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
双向循环链表是基于双向链表的基础上实现的,和双向链表的操作差不多,唯一的区别就是它是个循环的链表,通过每个节点的两个指针把它们扣在一起组成一个环状.所以呢,每个节点都有前驱节点和后继节点(包括头节点和 ...
- Linux内核2.6.14源码分析-双向循环链表代码分析(巨详细)
Linux内核源码分析-链表代码分析 分析人:余旭 分析时间:2005年11月17日星期四 11:40:10 AM 雨 温度:10-11度 编号:1-4 类别:准备工作 Email:yuxu97101 ...
- 双向链表、双向循环链表的JS实现
关于链表简介.单链表.单向循环链表.JS中的使用以及扩充方法: 单链表.循环链表的JS实现 关于四种链表的完整封装: https://github.com/zhuwq585/Data-Structu ...
- 双向循环链表的Java版本实现
1.单项循环列表 单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环.和单链表相比,循环单链表的长处是从链尾到链 ...
- c语言编程之双向循环链表
双向循环链表就是形成两个环,注意每个环的首尾相连基本就可以了. 程序中采用尾插法进行添加节点. #include<stdio.h> #include<stdlib.h> #de ...
- Linux内核中的通用双向循环链表
开发中接触Linux越来越多,休息放松之余,免不了翻看翻看神秘的Linux的内核.看到双向链表时,觉得挺有意思的,此文记下. 作为众多基础数据结构中的一员,双向循环链表在各种“教科书”中的实现是相当的 ...
- java与数据结构(4)---java实现双向循环链表
线性表之链式存储结构双向循环链表 双向循环链表:每个结点包含了数据.直接前驱地址指针和直接后驱地址指针,头结点的直接前驱指向尾结点,尾结点的直接后驱指向头结点,头尾相连构成一个可正可反的圆环.可以形象 ...
- 基于visual Studio2013解决算法导论之025双向循环链表
题目 双向循环链表 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> #in ...
随机推荐
- 使用Visual Studio的动态连接库创建通用数据库连接对话框
1.在VS(此处文件夹文件以vs2010为例)安装文件夹下("%Visual Studio安装文件夹%/Common10/IDE/Microsoft.Data.ConnectionUI.Di ...
- oracle调优 浅析有效的游标管理
浅析有效的游标管理 [思路分析] 能够把游标理解成共享的运行计划,当sql不被共享时.常规的解决思路有两个方向: 1.调整共享池的尺寸(共享池的库缓存区中共享运行计划): 2.sql书写时尽量重用绑定 ...
- MPTCP 源码分析(三) 子路径选择
简述: 支持MPTCP的链路中存在多条子路径,因此在发送数据的时候需要选择最优路径来进行操作. MPTCP利用内核通知链对MPTCP中各子路径进行增加路径.删除路径.修改路径优先级的操作.M ...
- 【Android】The application has stopped unexpectedly.Please try again.
打出的android APK在android4.0.2手机上运行正常,但是在2.3.7的MOTO DEFY ME525上运行失败. android 2.3.3版本的模拟器上面运行失败: Sorry! ...
- 【转】Spring Annotation 详解
(1) .<context:component-scan base-package="*.*" /> 该配置隐式注册了多个对注解进行解析的处理器,如: Autowire ...
- 模板:什么是Traits
Traits不是一种语法特性,而是一种模板编程技巧.Traits在C++标准库,尤其是STL中,有着不可替代的作用. 如何在编译期间区分类型 下面我们看一个实例,有四个类,Farm.Worke ...
- driver: Linux设备模型之input子系统具体解释
本节从总体上解说了输入子系统的框架结构.有助于读者从总体上认识linux的输入子系统.在陷入代码分析的过程中,通过本节的知识可以找准方向,明确原理. 本节重点: 输入子系统的框架结构 各层相应内核中的 ...
- ant-design 实现 搜索功能
1.逻辑代码 list.js /** * 用户列表页 */ import React,{ PureComponent } from 'react' import {connect} from 'rea ...
- Activity设置切换动画时黑屏问题的解决
//当这么设置的时候.打开Acticity的时候会黑屏一下 overridePendingTransition(R.anim.activity_open,0); //改成例如以下代码 完美解决这个问题 ...
- javascript获取日期的年,月,日
var date = new Date(strTime); return date.getFullYear()+"-"+(date.getMonth()+1)+"-&qu ...