码迷,mamicode.com
首页 > 其他好文 > 详细

习题3.26双端队列

时间:2015-08-01 23:30:28      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

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

 

习题3.26双端队列

标签:

原文地址:http://www.cnblogs.com/gabygoole/p/4694829.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!