队列实现 (双向循环链表 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 ... 
随机推荐
- Git服务器分类
			目录(?)[-] 服务器上的 Git 协议 本地协议 优点 缺点 SSH 协议 优点 缺点 Git 协议 优点 缺点 HTTPS 协议 优点 缺点 在服务器部署 Git 将纯目录转移到服务器 小型安装 ... 
- Yii2系列教程:安装及Hello World
			http://www.yiiframework.com/ 安装Yii2 打算从头开始,所以,连安装Yii2也稍微写一点吧.安装Yii2最好的方式就是使用composer: composer globa ... 
- 为Linux上FireFox安装Flash插件
			废话少说,步骤如下: 1.点击网页上插件缺失处,根据提示下载tar.gz版本的插件,我下载的版本是install_flash_player_11_linux.i386.tar.gz,这个文件被下载到了 ... 
- Java中Vector与ArrayList的差别具体解释
			首先看这两类都实现List接口,而List接口一共同拥有三个实现类.各自是ArrayList.Vector和LinkedList.List用于存放多个元素,可以维护元素的次序,而且同意元素的反复. 3 ... 
- [转载]Android开发者必须深入学习的10个应用开源项目
			[转载]Android开发者必须深入学习的10个应用开源项目 原文地址:Android开发者必须深入学习的10个应用开源项目(http://blog.sina.com.cn/s/blog_7b8a63 ... 
- mui 上拉加载更多
			看起来很简单的东西,实践过程中还是出现了很多麻烦,比如上拉时,状态条跑到了顶部,因为内容没有添加到容器中,再比如下拉的回调函数使用问题,this的传递. html实现部分: <div class ... 
- java之this关键字
			this使用范围 1.在类的方法定义中使用的this关键字代表调用该方法对象的引用. 2.当必须指出当前使用方法的对象是谁时,要使用关键字this. 3.有时使用this可以处理方法中成员变量和参数重 ... 
- c++ builder xe2 字符串转日期
			TFormatSettings * fmt = new TFormatSettings; fmt->ShortDateFormat = L"yy-mm-dd"; fmt-&g ... 
- NodeJS淘宝 CNPM 镜像
			原文地址:http://npm.taobao.org/ 设置NPM镜像(前提已安装NodeJS): npm config set registry https://registry.npm.taoba ... 
- php 实现 html转js
			[php] <?php function htmltojs($str){ $re=''; $str=str_replace('\','\\',$str); $str=str_replace(&q ... 
