zoukankan      html  css  js  c++  java
  • 习题3.26双端队列

    #include<stdio.h>
    #include<stdlib.h>
    
    struct Node;
    struct Queue;
    
    typedef struct Node * PtrToNode;
    typedef struct Queue * PtrToQ; 
    
    struct Node{
        PtrToNode Pre;
        PtrToNode Next;
        ElemenType Ele;
    }
    
    struct Queue{
        PtrToNode front;
        PtrToNode rear;
    };
    
    PtrToQ
    CreateDQ( void )
    {
        PtrToQ Q;
        Q = malloc( sizeof( struct Queue ) );
        
        Q->front = malloc( sizeof( struct Node ) );
        Q->front->pre = NULL;
        
        Q->rear = malloc( sizeof( struct Node ) );
        Q->rear->Next = NULL;
        
        Q->front->Next = Q->rear;
        Q->rear->Pre = Q->front;
        return Q;
    }
    
    void
    Push( ElementType X, PtrToQ Q )
    {
        PtrToNode TmpCell;
        TmpCell = malloc( sizeof( struct Node ) );
        /* 连接后面 */
        TmpCell->Next = Q->front->Next;
        TmpCell->Next->pre = TmpCell;
        /* 连接前面 */
        Q->front->Next = TmpCell;
        TmpCell->pre = Q->front;
    }
    
    ElementType
    Pop( PtrToQ Q )
    {
        PtrToNode TmpCell;
        ElementType res;
        if( !IsEmpty() )
        {
            TmpCell = Q->front->Next;
            Q->front->Next = TmpCell->Next;
            TmpCell->Next->pre = Q->front;
            res = TmpCell->Ele;
            free( TmpCell );
            return res;
        }
        else
            Error;
    }
    
    void
    Inject( ElementType X, PtrToQ Q )
    {
        PtrToNode TmpCell;
        TmpCell->Ele = X;
        /* 左边 */
        TmpCell->pre = Q->rear->pre;
        TmpCell->pre->Next = TmpCell;
        /* 右边 */
        TmpCell->Next = Q->rear;
        Q->rear->pre = Tmpcell;
    }
    
    ElementType
    Eject( PtrToQ Q )
    {
        if( !IsEmpty( Q ) ){
        PtrToNode TmpCell;
        ElementType res;
        TmpCell = Q->rear->pre;
        TmpCell->pre->Next = Q->rear;
        Q->rear->pre = TmpCell->pre;
        res = TmpCell->Ele;
        free(TmpCell);
        return res;
        }
        else
            Error;
    }
    View Code

    以上使用链表做两端都可以插入删除元素的双端队列

    初始状态为两个表头的双链表

    IsEmpty:判断队列是否只有两个结点

  • 相关阅读:
    extjs 获取Dom对象
    转: python requests的安装与简单运用
    转: python如何安装pip和easy_installer工具
    转: windows下面安装Python和pip终极教程
    JS Json数据转换
    转:永久解决火狐浏览器出现的flash版本更新问题
    python 字符编码 转换
    opencv输出图片像素值
    Mac中安装tensorflow(转)
    在linux和Mac中访问某个文件夹中所有的文件
  • 原文地址:https://www.cnblogs.com/gabygoole/p/4694829.html
Copyright © 2011-2022 走看看