首页 > 编程语言 > 详细

习题3.25 链表和数组对队列例程实现

时间:2015-07-14 20:12:34      阅读:502      评论:0      收藏:0      [点我收藏+]
技术分享
//链表做队列
/* assume a header */
struct Node;
struct Queue;
typedef struct Node * PtrToNode;
typedef struct Queue * PtrToQ;

struct Node{
    ElementType ele;
    PtrToNode Next;
};

struct Queue{
    PtrToNode rear;
    PtrToNode front;
};

PtrToQ
CreateQ( void )
{
    PtrToQ Q;
    Q = malloc( sizeof( struct Queue ) );
    Q->rear = Q->front = malloc( sizeof( struct Node ) );
    Q->rear->next = NULL;
}

void
AddQ( ElementType X, PtrToQ Q )
{
    PtrToNode TmpCell;
    Tmpcell = malloc( sizeof( struct Node ) );
    TmpCell->ele = X;
    TmpCell->Next = NULL;
    Q->rear->Next = TmpCell;
    Q->rear = TmpCell;
}

Elementtype
DeleteQ( PtrToQ Q )
{
    ElementType res;
    PtrToNode TmpCell;
    TmpCell = Q->front->Next;
    Q->front->Next = TmpCell->Next;
    res = Tmpcell->ele;
    free( TmpCell );
    return res;
}
View Code

以上使用链表做的

以下是用数组做的

技术分享
//循环数组
#define MaxSize 100
struct Queue;
typedef struct Queue * PtrToQ;

struct Queue{
    ElementType *Array;
    int front;
    int rear;
};

PtrToQ
CreateQ( int Size )
{
    PtrToQ Q;
    Q = malloc( sizeof( struct Queue ) );
    Q->Array = malloc( sizeof( ElementType ) * Size );
    Q->front = Q->rear = 0;
    return Q;
}

int 
IsFull( PtrToQ Q )
{
    return ( Q->rear + 1 ) % MaxSize == Q->front;
}

void
AddQ( ElementType X, PtrToQ Q )
{
    if( !IsFull( Q ) ){
    Q->rear = ( Q->rear + 1 ) % MaxSize;
    Q->Array[ Q->rear ] = X;
    }
    else
        Error("full")
}

int 
IsEmpty( PtrToQ Q )
{
    return Q->rear == Q->front;
}

ElementType
DeleteQ( PtrToQ Q )
{
    if( !IsEmpty( Q ) )
    {
        Q->front = ( Q->front + 1 ) % MaxSize;
        return Q->front->ele;
    }
    else
        Error();
}
View Code

在循环数组这一栏,实际上front所指向的地方实际上是没有意义但要保留的,为空

习题3.25 链表和数组对队列例程实现

原文:http://www.cnblogs.com/gabygoole/p/4646138.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!