链式队列基本操作的实现问题

问题描述:用链式存储方式实现队列的基本操作

涉及变量:front:Node型自定义变量,指向队首元素

                   rear:Node型自定义变量,指向队尾元素

涉及教材:《数据结构——Java语言描述(第2版)》 清华大学出版社

大致思路:

链式存储结构不害怕出队列会浪费空间,因此也不需要要循环结构来节约空间

front为指向队首结点的指针

rear为指向队尾结点的指针

初始化时它们均指向空

初始化代码如下:

队列的置空方法与初始化相类似

而判断队列是否为空只需要判断队首指针是否指向非空元素即可

代码如下:

求长度与陈列元素方法有异曲同工之妙

同样是挨个判断元素是否为空后再进行选择

在求长度方法中,若不为空,则长度变量自增加1

在陈列元素中,若不为空,则输出元素

代码如下:

入队列,在队列为空时,将队首指针和队尾指针同时指向插入的元素

若不为空,则改变原队尾元素的指向和队尾指针的指向

出队列:在队首指针不指向空时,开始出队列操作,移动队首指针

若出队列的是队尾元素,则出队列后队列为空,将队尾指针指向空

取队首元素:只需要返回队首元素的数据域即可

以上是我对链式队列的基本操作的实现问题的一些看法,希望对各位有所帮助

190125 Rewivy

转载于:https://www.cnblogs.com/rewivy/p/10322279.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值