- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
作为练习,我正在尝试创建一个基本队列。我的 deQueue
方法有问题。
#include<stdio.h>
typedef int Task;
typedef struct QueueNode_ QueueNode;
typedef struct TQueue_ TQueue;
struct QueueNode_ {
QueueNode* next;
Task task;
};
struct TQueue_ {
QueueNode* first;
QueueNode* last;
};
TQueue* initializeQueue(){
TQueue* queue = NULL;
queue = malloc(sizeof(TQueue));
queue->first = NULL;
queue->last = NULL;
return queue;
}
void enQueue(TQueue* q, Task t){
if(q->first == NULL){
q->first = malloc(sizeof(QueueNode));
q->first->task = t;
q->first->next = NULL;
q->last = q->first;
} else {
QueueNode* node = malloc(sizeof(QueueNode));
node->next = q->last;
node->task = t;
q->last = node;
}
}
void printQueue(TQueue* q){
QueueNode* node = q->last;
printf("LAST->");
while(node != NULL){
printf("%d->", node->task);
node = node->next;
}
printf("FIRST\n");
}
QueueNode* deQueue(TQueue* q){
QueueNode* temp = q->first;
QueueNode* newFirst = q->last;
q->first = NULL;
while(newFirst != NULL){
newFirst = newFirst->next;
}
q->first = newFirst;
return temp;
}
int main(){
TQueue* queue = initializeQueue();
enQueue(queue, 1);
enQueue(queue, 2);
printQueue(queue);
QueueNode* node = deQueue(queue);
printf("%d\n", node->task);
printQueue(queue);
return 0;
}
我希望我的 deQueue
方法能够移除队列的头部。但显然并非如此。
这是输出:
LAST->2->1->FIRST
1
LAST->2->1->FIRST
我怀疑我的 deQueue
方法没有用第二个元素替换队列的头部,但我虽然是用 q->first = newFirst;
来做的,所以我有点卡住了。
只是如果不清楚我希望它打印:
LAST->2->1->FIRST
1
LAST->2->FIRST
最佳答案
你可以这样做:
QueueNode* deQueue(TQueue* q){
QueueNode *tmp = q->last;
while(tmp->next != q->first) {
tmp = tmp->next;
}
// new first is now the old second element
q->first = tmp;
// new firsts' next still points at
// old first so we free that memory here
free(q->first->next);
q->first->next = NULL;
return tmp;
}
不要忘记释放内存。
您可以在这里进行测试:http://www.compileonline.com/compile_c_online.php
关于c - 如何从我的自定义队列中取出元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23312318/
我有这样的数据。 (a,b,c,d) (g,b,v,n) (n,h,l,o) (,,,) (,,,) (,,,) (,,,) 我想取出空袋子。 所需的输出 (a,b,c,d) (g,b,v,n) (n
我是编程新手,我有一堆 CSV 文件,每个文件大约有 50 到 60 行。在未指定数量的行之后,第二列中有一个名为“NAME”的字符串。我想获取“NAME”之后第二列中的所有内容并将其打印到文本文件中
有没有办法在 linq 中删除以下代码中的 foreach 并产生相同的输出? DropDownList ddl = new DropDownList(); foreach (Data
注意-可以使用UIViewControllerAnimatedTransitioning https://developer.apple.com/library/ios/documentation/u
因此,我开始使用 Swift 为网站构建应用程序。主要目标是拥有一个可以接收通知(来自网站的 JSON)并可以显示网站所有功能的 iOS 应用程序。所以我可以从应用程序登录并注册到我的数据库,但问题是
我希望直接使用 ALAssetsLibrary 和 ALAsset 以 NSData 对象的形式提取图像。 使用 NSURL,我按以下方式取出图像。 NSURL *referenceURL =newU
我是一名优秀的程序员,十分优秀!