首页 > 其他 > 详细

单链队列的实现

时间:2017-10-23 23:39:42      阅读:269      评论:0      收藏:0      [点我收藏+]

我把调通的完整代码放在下面

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAXSIZE 100
#define ElemType int
typedef struct qnode{
    ElemType data;
    struct qnode *next;
}DataNode;

typedef struct{
    DataNode *head;
    DataNode *rear;
}LinkQuNode;

void InitQueue(LinkQuNode *q)
{
    q->head=q->rear = (DataNode *)malloc(sizeof(DataNode));
    q->head->next =NULL;
}
void enQueue(LinkQuNode &q,ElemType e)
{
    DataNode *p;
    p= (DataNode *)malloc(sizeof(DataNode));
    p->data = e;
    p->next = NULL;
     q.rear->next = p;
        q.rear = p;
}

int deQueue(LinkQuNode &q,ElemType &e)
{   DataNode *p;
        if(q.head==q.rear)
         return 0;
         p = q.head->next;
         e = p->data;
         q.head->next = p->next;
         if(q.rear == p)
            q.rear = q.head;
        free(p);
        return 1;

}
int main(){
    LinkQuNode Q;
    int e;
    int i;
    InitQueue(&Q);
     for(i=0;i<5;i++)
        enQueue(Q, i);
    for( i=0; i<5;i++){
        deQueue(Q,e);
        printf("%d",e);
    }


    return 0;
}

这个队列最讲究的地方就是初始化了,别看简单,还是有一个陷阱呢,今天掉下去爬了好久没爬上来

head和rear都是指向DataNode类型的指针,初始化的时候建立了一个DataNode结点让head和rear都指向它

增加结点的时候在队尾rear后面增加

删除结点的时候在队头后删除,注意只有一个结点的情况,为了避免rear丢失,把head的值赋给rear

单链队列的实现

原文:http://www.cnblogs.com/zhangxiran/p/7719721.html

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