- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用链接实现在 C 中编写基本的出队程序。但它显示用于将元素插入出队的函数存在一些错误。我还想显示出队中的元素。下面是我尝试过的代码。运行代码时 CLI 不显示任何输出。由于插入函数中的错误,我不确定删除函数是否也正确或不正确。
#include<stdio.h>
#include<stdlib.h>
typedef int DeQueueElement;
typedef enum{FALSE,TRUE} Boolean;
typedef struct node{
DeQueueElement entry;
struct node *next, *prev;
}Node;
typedef struct dequeue{
int count;
Boolean full;
Node *front;
Node *rear;
}DeQueue;
void CreateDeQueue(DeQueue *dq){
dq->count = 0;
dq->full = FALSE;
dq->front = dq->rear = -1;
}
Boolean IsEmpty(DeQueue *dq){
return (dq->front == NULL && dq->rear == NULL);
}
Boolean IsFull(DeQueue *dq){
return(dq->full);
}
void InsertRear(DeQueueElement x, DeQueue *dq){
Node *np;
np = (Node* )malloc(sizeof(Node));
if(np == NULL){
printf("Not enough space\n");
}
else{
if(dq->rear == NULL)
dq->front = dq->rear = np;
else{
np->prev = dq->rear;
dq->rear->next = np;
dq->rear = NULL;
np->next = np;
np->entry = x;
}
}
}
void InsertFront(DeQueueElement x, DeQueue *dq){
Node *np;
np = (Node* )malloc(sizeof(Node));
if(np == NULL)
printf("Not enough space\n");
else{
if(dq->front == NULL)
dq->rear = dq->front = np;
else{
np->next = dq->front;
dq->front->prev = np;
dq->front = np;
np->prev = NULL;
np->entry = x;
}
}
}
void DeleteFront(DeQueue *dq){
if(dq->front == NULL)
printf("Underflow\n");
else{
Node *temp;
temp = dq->front;
dq->front = dq->front->next;
if(dq->front == NULL)
dq->rear = NULL;
else
dq->front->prev = NULL;
free(temp);
}
}
void DeleteRear(DeQueue *dq){
if(dq->front == NULL)
printf("Underflow\n");
else{
Node *temp;
temp = dq->rear;
dq->rear = dq->rear->prev;
if(dq->rear == NULL)
dq->front == NULL;
else
dq->rear->next = NULL;
free(temp);
}
}
void display(DeQueue *dq) {
Node *temp;
if (dq->front->next == dq->rear) {
printf("Queue is empty\n");
return;
}
temp = dq->front->next;
while (temp != dq->rear) {
printf("%d", temp->entry);
temp = temp->next;
}
printf("\n");
}
int main(){
DeQueue dq;
CreateDeQueue(&dq);
InsertFront(21,&dq);
InsertFront(1,&dq);
InsertFront(221,&dq);
InsertRear(23,&dq);
InsertRear(36,&dq);
display(&dq);
}
最佳答案
代码有一些错误,我尝试更正它们并评论我所做的更改。问题出在 CreateDeQueue
、InsertFront
、InsertRear
和 display
函数中。
void CreateDeQueue(DeQueue *dq){
dq->count = 0;
dq->full = FALSE;
// dq->front = dq->rear = -1;
// Change 0: It should be NULL or 0 not -1
dq->front = NULL;
dq->rear = NULL;
}
void InsertRear(DeQueueElement x, DeQueue *dq){
Node *np;
np = (Node* )malloc(sizeof(Node));
if(np == NULL){
printf("Malloc failed\n");
}
else{
np->entry = x;
np->next = NULL;
np->prev = NULL;
if(dq->rear == NULL)
dq->front = dq->rear = np;
else{
np->prev = dq->rear;
dq->rear->next = np;
//dq->rear = NULL;
//Change 1: Why dq->rear to NULL it should point to valid mem location
dq->rear = np;
}
dq->count++;
}
}
void InsertFront(DeQueueElement x, DeQueue *dq){
Node *np;
np = (Node* )malloc(sizeof(Node));
if(np == NULL)
printf("Malloc failed. \n");
else{
//Change 3: Initialize the newly created struct Node, np
np->entry = x;
np->next = NULL;
np->prev = NULL;
if(dq->front == NULL)
dq->rear = dq->front = np;
else{
np->next = dq->front;
dq->front->prev = np;
dq->front = np;
}
dq->count++;
}
}
void display(DeQueue *dq) {
Node *temp;
if (dq->front->next == dq->rear) {
printf("Queue is empty\n");
return;
}
temp = dq->front;
// Change 4: Checking temp against dq->rear is not logical i guess
// temp should not be NULL. Printing from the front
while (temp!=dq->rear->next) {
printf("%d ", temp->entry);
printf("\n");
temp = temp->next;
}
}
关于c - 如何使用 C 中的链接实现将元素插入和显示到 Dequeue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59105432/
如果我这样做有什么不同吗: $queue.queue(function(next){ //... next(); }).queue(function(next){ //...
我在算法类(class)中浏览了Queue 的实现代码,并观察了作者使用的dequeue() 代码: private Node first, last; private class Node {
是否有人考虑过为 Azure 存储队列实现策略,允许以任意顺序(除了先进先出)使消息出队。例如,有些人可能对 LIFO 感兴趣,有些人可能希望在不太重要的消息之前将“重要”消息出队,等等。 就我个人而
Visual VM 显示 FifoMessageDispatchChannel.dequeue() 花费了大量时间。 Tomcat 进程正在使用大约 100% 的处理器核心。 最佳答案 最可能的原因是
我正在尝试创建一个链接列表出队类,它接受头部和尾部的节点。一切都编译得很好,但是当我运行它时,我得到一个 NullPointerException。它指向我的内部 QueueNode 类,但我不确定如
我正在用 C++ 编写一个队列(我不应该使用 STL)。我的出队函数需要返回它从我的队列中删除的整数。但是,如果队列为空,它应该返回什么?我应该抛出异常吗?如果是,抛出哪个异常?还是我应该返回 nul
我正在尝试为队列实现一个dequeue 函数,但我对借用检查器的工作原理感到困惑。我在这段代码中做错了什么? use std::cell::RefCell; use std::rc::Rc; use
我正在尝试制作一个运行模拟的程序。使用断点,我已经验证入队方法运行了正确的次数,并且似乎有一个完整的节点链表。然后程序应该运行 dequeue 方法一定次数。 dequeue 方法运行一次,由于某种原
目前正在准备考试,无法弄清楚示例代码中 queue[rear*] = new_node 背后的原因。 你不是把 new_node 的地址而不是值放进去吗? 还有,这个队列是不是Node**队列,因为它
这个问题在这里已经有了答案: How to change value of variable passed as argument? (4 个答案) 关闭 5 年前。 我正在尝试创建我的队列库,当我
我正在尝试在 C 中建立一个双端指针队列。到目前为止,我已经运行并测试了推送功能。我的问题似乎是两端弹出条目。 #include #include #include "dequeue.h" deq
我已经使用两个堆栈编写了一个队列代码。但是代码的出队部分表现得很奇怪,它正确地删除了测试中的第一个元素,但是第二个和第三个元素的顺序错误。 这是出队代码,我正在使用: public T dequeue
你能帮我解释一下关于“dequeue cell”的细节,以及 dequeueReusableCellWithIdentifier:forIndexPath 中的“resize properly”是什么
我正在尝试使用 swift 测试我的 UICollectionViewDataSource,但它在尝试使单元格出队时引发异常。异常似乎没有为重用标识符注册类。在我的 Storyboard 中,我注册了
我得到了Oracle的以下错误, ORA-25226: dequeue failed, queue string.string is not enabled for dequeue 下面是官方文档中的
首先,我将解释一个简短的场景; 当来自某些设备的信号触发时,一个类型为 Alarm 的对象被添加到队列中。每隔一段时间检查队列,并针对队列中的每个警报触发一个方法。 但是,我遇到的问题是,如果在遍历队
我有一个名为 _deck 的卡片列表: private List _deck = new List {"2h", "3h", "4h", ... } 然后我想从 List 中删除一张卡片并保存到一个
有人可以解释一下主要区别吗?我对任何语言的编程中的这些功能都没有清楚的了解。 最佳答案 C 和 C++ 等编程语言中的一些基本数据结构是堆栈和队列。 堆栈数据结构遵循“先进后出”策略 (FILO),其
是否有有关如何使用 Data.Dequeue 模块的代码示例? 如果我导入 Data.Dequeue,当我尝试使用数据构造函数 BankersDequeue 时,我将无法执行此操作。 GHCi, ve
是否有有关如何使用 Data.Dequeue 模块的代码示例? 如果我导入 Data.Dequeue,当我尝试使用数据构造函数 BankersDequeue 时,我将无法执行此操作。 GHCi, ve
我是一名优秀的程序员,十分优秀!