我想创建一个链接队列并使用它。
代码可以编译但是.exe文件会在我执行的时候崩溃
我确定这不是Vscode终端的问题。我用powershell运行它时发生了同样的结果
头文件:
我定义了队列节点结构(lkQueueNode)和队列结构(lkQueueNode)
两个函数,一个是添加元素,另一个是删除元素
#include<iostream>
using namespace std;
#ifndef lkqueue
#define lkqueue
//Queue Node
struct lkQueueNode{
lkQueueNode(){
next=nullptr;
data = 0;
}
int data;
lkQueueNode *next;
};
typedef lkQueueNode *QueueNode;
//Queue Structure
struct lkQueueStructure{
lkQueueStructure(){
rear = nullptr;
front = nullptr;
}
QueueNode rear;
QueueNode front;
};
typedef lkQueueStructure *lkQueue;
//Add
void AddQ(lkQueue Q,int item)
{
QueueNode NewAdd = new lkQueueNode;
if(Q->front==nullptr){
Q->front = NewAdd;
Q->rear = NewAdd;
}
else{
Q->rear->next = NewAdd;
Q->rear = NewAdd;
}
NewAdd->data = item;
}
//Delete
int DeleteQ(lkQueue Q)
{
QueueNode firstnode;
int item;
if(Q->front == nullptr){//empty or not
cout<<"empty!"<<endl;
return 0;
}
firstnode = Q->front;//save the first elm
if(Q->front == Q->rear){ //when only one elem
Q->front = Q->rear = nullptr;
}
else{
Q->front = Q->front->next;
}
item = firstnode->data;
delete firstnode; //Free
return item;
}
#endif
main.cpp: 我创建了一个 lkQueue 指针“aqueue”,然后添加整数 5、7、9 并删除(也返回)整数 5 , 用 "cout" 来显示
#include<iostream>
#include "lkqueue.h"
using namespace std;
int main()
{
lkQueue aqueue;
AddQ(aqueue,5);
AddQ(aqueue,7);
AddQ(aqueue,9);
int i = DeleteQ(aqueue);
cout<<i<<endl;
return 0;
}
:)
希望能显示数字5
Q
是 nullptr。你必须在main()
中初始化它
lkQueue aqueue = new lkQueueStructure;
然后它运行正常。
$ ./x
5