中二病重度

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

#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

posted on 2017-10-23 23:02  中二病重度  阅读(161)  评论(0编辑  收藏  举报