Chinaunix首页 | 论坛 | 博客
  • 博客访问: 391654
  • 博文数量: 199
  • 博客积分: 154
  • 博客等级: 入伍新兵
  • 技术积分: 1530
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-14 08:43
文章分类

全部博文(199)

文章存档

2015年(101)

2014年(97)

2011年(1)

分类: C/C++

2015-05-18 14:28:05

#include "stdio.h"
typedef char ElemType;
typedef struct QNode{
    ElemType data;
    struct QNode *next;
} QNode , *QueuePtr;
typedef struct{
    QueuePtr front;   //队头指针
    QueuePtr rear;    //队尾指针
}LinkQueue;


initQueue(LinkQueue *q){
    /*初始化一个空队列*/
    q->front = q->rear = (QueuePtr)malloc(sizeof(QNode)); /*创建一个头结点,队头队尾指针                                                                指向该结点*/
    if( !q->front) exit(0);     /*创建头结点失败*/
    q->front->next = NULL;     /*头结点指针域置NULL*/
}


EnQueue(LinkQueue *q, ElemType e){
    QueuePtr p;
    p = (QueuePtr)malloc(sizeof(QNode));  /*创建一个队列元素结点*/
    if( !q->front) exit(0);     /*创建头结点失败*/
    p->data = e;
    p->next = NULL;
    q->rear ->next = p;
    q->rear = p;
}
DeQueue(LinkQueue *q, ElemType *e){
    /*如果队列q不为空,删除q的队头元素,用e返回其值*/
    QueuePtr p;
    if(q->front == q->rear) return;  /*队列为空,返回*/
    p = q->front->next;
    *e = p->data;
    q->front->next = p->next;
    if(q->rear == p) q->rear = q->front;  /*如果队头就是队尾,则修改队尾指针*/
    free(p);
}
/*测试函数*/
main()
{
    ElemType e;
    LinkQueue  q;
    initQueue(&q);           /*初始化一个队列q*/
    printf("Please input a string into a queue\n");
    scanf("%c",&e);
    while(e!='@'){
        EnQueue(&q,e);   /*向队列中输入字符串,以@表示结束*/ 
        scanf("%c",&e);
    }
    printf("The string into the queue is\n");
    while(q.front != q.rear){   /*将队列中的元素出队列,并打印在屏幕上*/
        DeQueue(&q,&e);
        printf("%c",e);
    }
    printf("\n");
}



阅读(923) | 评论(0) | 转发(0) |
0

上一篇:

下一篇:二叉树

给主人留下些什么吧!~~