ex7.写一个队列

#include<stdio.h>
#include<stdlib.h>
typedef int QElemType;
typedef struct QNode{
    QElemType data;
    struct QNode *next ;
}QNode,*QueuePtr;
typedef struct{
    QueuePtr front;
    QueuePtr rear;
}LinkQueue;
int InitQueue(LinkQueue &Q){
    Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
    if(!Q.front) exit(-2);
    Q.front->next = NULL;
    return 1;
}
int EnQueue(LinkQueue &Q,QElemType e){
    QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
    if(!p) exit(-2);
    p->data = e;p->next = NULL;
    Q.rear->next = p;
    Q.rear = p;
    return 1;
}
int DeQueue(LinkQueue &Q,QElemType &e){
    if(Q.front == Q.rear) return -1;
    QueuePtr p = Q.front->next;
    e = p->data;
    Q.front->next = p->next;
    if(Q.rear == p) Q.rear = Q.front;
    free(p);
    printf("%d Out\n",e);
    return 1;
}
int DestoryQueue(LinkQueue &Q){
    while(Q.front){
        Q.rear = Q.front->next;
        free(Q.front);
        Q.front = Q.rear;
    }
    return 1;
}
void ShowQueue(LinkQueue &Q)
{
    printf("-----ShowQueue Start-----\n");
    QueuePtr pf = Q.front;
    QueuePtr pr = Q.rear;
    while(pf!=pr){
        pf = pf->next ;
        printf("%d\n",pf->data);
    }
    printf("-----ShowQueue Done-----\n");
}
int main(){
    LinkQueue q1;
    InitQueue(q1);
    EnQueue(q1,1);EnQueue(q1,2);EnQueue(q1,3);EnQueue(q1,4);EnQueue(q1,5);
    ShowQueue(q1);
    QElemType e;
    DeQueue(q1,e);DeQueue(q1,e);
    ShowQueue(q1);
    return 0;
}
    

虽然书中把队列和栈放在了同一章,不过理解起队列还是要比栈难一点。不过熟悉过后都不难,多练习

时间: 2024-10-14 01:30:47

ex7.写一个队列的相关文章

教你如何使用Java手写一个基于数组实现的队列

一.概述 队列,又称为伫列(queue),是先进先出(FIFO, First-In-First-Out)的线性表.在具体应用中通常用链表或者数组来实现.队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作.队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加. 在Java中队列又可以分为两个大类,一种是阻塞队列和非阻塞队列. 1.没有实现阻塞接口: 1)实现java.util.Queue的LinkList, 2)实现java.util.Abstra

【转载】如何写一个框架:步骤(下)

说明:写本文的时候作者完全是把脑子里的东西写了出来,没有参考任何的资料,所以对于每一项内容可能都是不完整的,不能作为一个完整的参考.有一些方法学的东西每个人都有自己的喜好,没有觉得的对和错. 单元测试 在这之前我们写的框架只能说是一个在最基本的情况下可以使用的框架,作为一个框架我们无法预测开发人员将来会怎么使用它,所以我们需要做大量的工作来确保框架不但各种功能都是正确的,而且还是健壮的.写应用系统的代码,大多数项目是不会去写单元测试的,原因很多: 项目赶时间,连做一些输入验证都没时间搞,哪里有时

自己动手实现一个队列LGQueue

自己动手实现一个队列LGQueue iOS系统没有提供queue容器,如果想用,需要手动自己来写一个: .h // // LGQueue.h // AntsSportApp // // Created by ligang on 15/3/24. // Copyright (c) 2015年 ligang. All rights reserved. // #import <Foundation/Foundation.h> @interface LGQueue : NSObject @proper

使用IntentService给自己的Android应用写一个文件下载器。

接着上一篇的http://www.cnblogs.com/zhengxt/p/3657833.html,当我们想给自己的APP写一个文件下载器时,可以用重写IntentService来实现. 使用IntentService有几个好处,IntentService继承于Service,适合拿来处理一些耗时又不需要去管它的任务.把要执行的任务用Intent加入到队列中,IntentService会有一个工作线程来取出队列中的Intent来处理.需要实现抽象方法onHandleIntent方法来执行这些

操刀 requirejs,自己动手写一个

前沿 写在文章的最前面 这篇文章讲的是,我怎么去写一个 requirejs . 去 github 上fork一下,顺便star~ requirejs,众所周知,是一个非常出名的js模块化工具,可以让你使用模块化的方式组织代码,并异步加载你所需要的部分.balabala 等等好处不计其数. 之所以写这篇文章,是做一个总结.目前打算动一动,换一份工作.感谢 一线码农 大大帮忙推了携程,得到了面试的机会. 面试的时候,聊着聊着感觉问题都问在了自己的“点”上,应答都挺顺利,于是就慢慢膨胀了.在说到模块化

013使用两个栈实现一个队列(keep it up)

使用两个栈实现一个队列 队列是先进先出的数据结构(FIFO),栈是先进后出的数据结构(FILO), 用两个栈来实现队列的最简单方式是:进入队列则往第一个栈压栈, 出队列则将第一个栈的数据依次压入第二个栈,然后出栈. 两条规则: 1)进队列,则直接压入第一个栈 2)出队列,若果第二个栈不为空,直接pop(),如过第二个栈为空, 则把第一个栈中的数据全部压入第二个栈(第一个栈此时为空). 实际写代码时注意栈为空的情况. 代码: #include <iostream> #include <st

自己动手写一个iOS 网络请求库的三部曲[转]

代码示例:https://github.com/johnlui/Swift-On-iOS/blob/master/BuildYourHTTPRequestLibrary 开源项目:Pitaya,适合大文件上传的 HTTP 请求库:https://github.com/johnlui/Pitaya 本系列文章中,我们将尝试使用 NSURLSession 技术构建一个自己的网络请求库. NSURLSession 简介 NSURLSession 是 iOS7 引入的新网络请求接口,在 WWDC2013

如何写一个Web服务器

最近两个月的业余时间在写一个私人项目,目的是在Linux下写一个高性能Web服务器,名字叫Zaver.主体框架和基本功能已完成,还有一些高级功能日后会逐渐增加,代码放在了github.Zaver的框架会在代码量尽量少的情况下接近工业水平,而不像一些教科书上的toy server为了教原理而舍弃了很多原本server应该有的东西.在本篇文章中,我将一步步地阐明Zaver的设计方案和开发过程中遇到的困难以及相应的解决方法. 为什么要重复造轮子 几乎每个人每天都要或多或少和Web服务器打交道,比较著名

两个桟实现一个队列

题目:俩个桟实现一个队列,请实现它的俩个函数appendTail/deleteHead 算法思路: 入队:将元素压入桟s1中://appendTail 出队:先判断s2中是否为空,如果不为空,直接弹出栈顶元素:否则,将s1中的元素逐个弹出并压入桟s2中,把最后一个元素弹出并出队://deleteHead 判断队列是否为空(empty()):判断s1/s2中都没有元素时,返回true,否则返回false://Empty 取队头元素(top()):先判断s2中是否为空,如果不为空,直接取s2栈顶元素