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:判断队列是否只有两个结点

  • 相关阅读:
    华为測试 字符串运用-password截取
    海量路由表能够使用HASH表存储吗-HASH查找和TRIE树查找
    MapReduce源代码浅析
    POJ 2524 并查集
    unity3d 建树篇
    mysql 自己定义存储过程和触发器
    如何在线缩小jpg图片的大小
    Winodws安装系统时,通过安装磁盘进行分区
    新年新气象
    java.lang.ClassNotFoundException与java.lang.NoClassDefFoundError的区别
  • 原文地址:https://www.cnblogs.com/gabygoole/p/4694829.html
Copyright © 2011-2022 走看看