单链队列的实现

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

#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  中二病重度 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/zhangxiran/p/7719721.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
链队列实现可以使用C语言中的链表来实现,具体实现如下: ``` #include <stdio.h> #include <stdlib.h> // 定义队列结构体 typedef struct QueueNode { int data; struct QueueNode* next; } QueueNode; // 定义队列 typedef struct { QueueNode* front; // 队头指针 QueueNode* rear; // 队尾指针 } Queue; // 初始化队列 void initQueue(Queue* queue) { queue->front = NULL; queue->rear = NULL; } // 判断队列是否为空 int isQueueEmpty(Queue* queue) { return queue->front == NULL; } // 入队 void enqueue(Queue* queue, int data) { QueueNode* node = (QueueNode*)malloc(sizeof(QueueNode)); node->data = data; node->next = NULL; if (queue->rear == NULL) { queue->front = node; queue->rear = node; } else { queue->rear->next = node; queue->rear = node; } } // 出队 int dequeue(Queue* queue) { if (isQueueEmpty(queue)) { printf("Error: Queue is empty.\n"); exit(1); } int data = queue->front->data; QueueNode* temp = queue->front; queue->front = queue->front->next; if (queue->front == NULL) { queue->rear = NULL; } free(temp); return data; } // 打印队列 void printQueue(Queue* queue) { printf("Queue: "); QueueNode* node = queue->front; while (node != NULL) { printf("%d ", node->data); node = node->next; } printf("\n"); } // 测试队列 int main() { Queue queue; initQueue(&queue); enqueue(&queue, 1); enqueue(&queue, 2); enqueue(&queue, 3); printQueue(&queue); dequeue(&queue); printQueue(&queue); dequeue(&queue); printQueue(&queue); dequeue(&queue); printQueue(&queue); dequeue(&queue); // Error: Queue is empty. return 0; } ``` 上述代码实现链队列的基本操作,包括初始化队列、判断队列是否为空、入队、出队、打印队列等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值