链式队列的基本操作与实现

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <iostream>

typedef int ElementType;

//定义结点
typedef struct LinkNode{
    ElementType data;
    struct LinkNode* next;
} *StackNode, *QueueNode;
//定义队列
typedef struct {
    LinkNode *front, *rear;
} LinkQueue;

//初始化队列
LinkQueue* InitQueue(LinkQueue* L){
    printf("初始化队列\n");
    L = (LinkQueue*)malloc(sizeof(LinkQueue));
    //L->rear = L->front = NULL;
    L->front = L->rear = (LinkNode*)malloc(sizeof(LinkNode));
    L->front->next = NULL;
    return L;
}
//判断队列是否为空
bool IsQueueEmpty(LinkQueue* L){
    if (L->front == L->rear){
        printf("队列为空\n");
        return false;
    }
    return true;
}
//入队
LinkQueue* EnQueue(LinkQueue* Queue, ElementType data){
    LinkNode* L = (LinkNode*)malloc(sizeof(LinkNode));
    L->data = data;
    L->next = NULL;
    Queue->rear->next = L;
    Queue->rear = L;
    printf("入队元素为:%d\n", Queue->rear->data);
    return Queue;
}
//出队
LinkQueue* DeQueue(LinkQueue* L){
    if (IsQueueEmpty(L) == false){
        printf(":所以不能出队!\n");
        return NULL;
    }
    printf("出队元素是:%d\n", L->front->next->data);

    //用这一句就够了 
    //L->front = L->front->next;
    //为了严谨,用一下语句 

    LinkNode* node = (LinkNode*)malloc(sizeof(LinkNode));
    node = L->front->next;
    //printf("L->front=%d\n", L->front->data);
    L->front->next = node->next;
    //printf("L->front=%d\n", L->front->data);
    if (L->rear == node)
        L->front = L->rear;

    //printf("对头元素是:%d\n", L->front->next->data);
    free(node);
    return L;
}

// int main(void){
//     LinkQueue* Queue;
//     Queue = InitQueue(Queue);
//     if (IsQueueEmpty(Queue) == true)
//         printf("初始化为空成功");

//     EnQueue(Queue, 1);EnQueue(Queue, 2);
//     EnQueue(Queue, 3);EnQueue(Queue, 4);EnQueue(Queue, 5);
//     DeQueue(Queue);DeQueue(Queue);
//     DeQueue(Queue);DeQueue(Queue);DeQueue(Queue);

//     system("pause");
//     return 0;
// }
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以回答这个问题。链式队列基本操作包括:初始化队列、判断队列是否为空、入队、出队、取队头元素以及清空队列。以下是用 C 语言实现链式队列基本操作的示例代码: ``` #include<stdlib.h> #include<stdio.h> #define MaxSize 50 typedef struct node { int data; struct node *pNext; }Node, *pNode; typedef struct queue { pNode front; pNode rear; }Queue, *pQueue; //初始化队列 void InitQueue(pQueue q) { q->front = q->rear = (pNode)malloc(sizeof(Node)); if(NULL == q->front) { printf("初始化队列失败!"); exit(-1); } q->front->pNext = NULL; } //判断队列是否为空 int IsEmpty(pQueue q) { return q->front == q->rear ? 1 : 0; } //入队 void EnQueue(pQueue q, int value) { pNode pNew = (pNode)malloc(sizeof(Node)); if(NULL == pNew) { printf("入队失败!"); return; } pNew->data = value; pNew->pNext = NULL; q->rear->pNext = pNew; q->rear = pNew; } //出队 int DeQueue(pQueue q) { if(IsEmpty(q)) { printf("队列为空,无法出队!"); return -1; } pNode p = q->front->pNext; int value = p->data; q->front->pNext = p->pNext; if(q->rear == p) q->rear = q->front; //更新尾指针 free(p); return value; } //取队头元素 int GetHead(pQueue q) { if(IsEmpty(q)) { printf("队列为空,无法获取头元素!"); return -1; } return q->front->pNext->data; } //清空队列 void ClearQueue(pQueue q) { pNode p = q->front->pNext; pNode qNode; while(p) { qNode = p; p = p->pNext; free(qNode); } q->front = q->rear; } int main() { Queue q; InitQueue(&q); int i; for(i = 1; i <= MaxSize; ++i) EnQueue(&q, i); printf("队列头元素为:%d\n", GetHead(&q)); printf("出队的元素为:"); while(!IsEmpty(&q)) printf("%d ", DeQueue(&q)); printf("\n"); ClearQueue(&q); return 0; } ``` 请注意,这里的回答仅供参考,如有需要请自行验证代码的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值