【发布时间】:2016-04-06 08:01:04
【问题描述】:
假设我有这个结构:
struct Runway0Landing{
char fdetails[10];
int ArrivalTimeHours;
int ArrivalTimeMins;
int MinsToLand;
int MinsForFuel;
int passengers;
int WaitingTime;
struct Runway0Landing *nextPtr;
};
typedef struct Runway0Landing RunZeroLand;
typedef RunZeroLand *RunZeroLandPtr;
并且这个函数用来向队列中添加值;
void AddToRunway0L(RunZeroLandPtr *r0LhPtr,RunZeroLandPtr *r0LtPtr,char fdetails[],int ArrivalTimeHours,int ArrivalTimeMins,int MinsForFuel,int passengers)
{
RunZeroLandPtr newPtr;
int WaitingTime=0;
newPtr=malloc(sizeof(RunZeroLand));
if( newPtr!=NULL)
{
strncpy(newPtr->fdetails,fdetails,sizeof(RunZeroLand));
newPtr->ArrivalTimeHours=ArrivalTimeHours;
newPtr->ArrivalTimeMins=ArrivalTimeMins;
newPtr->MinsForFuel=MinsForFuel;
newPtr->passengers=passengers;
newPtr->WaitingTime=0;
newPtr->nextPtr=NULL;
if( isEmptyL0(*r0LhPtr))
{
*r0LhPtr=newPtr;
}
else
{
(*r0LtPtr)->nextPtr=newPtr;
}
*r0LtPtr=newPtr;
}
}
我尝试过这种方法,但程序崩溃了:
void RemoveFromQueue(RunZeroLandPtr *r0LhPtr,int MinsForFuel)
{
r0LhPtr previousPtr;
r0LhPtr currentPtr;
r0LhPtr tempPtr;
char plane[10];
int passengers;
int ArrivalTimeHours;
int ArrivalTimeMins;
int MinsForFuel;
strcpy(plane,(*r0LhPtr)->fdetails);
passengers=(*r0LhPtr)->passengers;
ArrivalTimeHours=(*r0LhPtr)->ArrivalTimeHours;
ArrivalTimeMins=(*r0LhPtr)->ArrivalTimeMins;
if(MinsForFuel == (*r0LhPtr)->MinsForFuel)
{
tempPtr=*r0LhPtr;
*r0LhPtr=(*r0LhPtr)->nextPtr;
free(tempPtr);
}
else
{
previousPtr=*r0LhPtr;
currentPtr=(*r0LhPtr)->nextPtr;
while(currentPtr!=NULL && currentPtr->MinsForFuel != MinsForFuel)
{
previousPtr=currentPtr;
currentPtr=currentPtr->nextPtr;
}
if(currentPtr!=NULL)
{
tempPtr=currentPtr;
previousPtr->nextPtr=currentPtr->nextPtr;
free(tempPtr);
}
}
我需要一个函数来检查队列中的所有节点是否符合特定标准(即:检查 MinsForFuel 是否等于 0 )并将其从队列中删除。我已经初始化了 r0LhPtr 和 r0LtPtr ( head 和 tail队列的指针)在 main 中为 NULL。
谢谢!
【问题讨论】:
-
你试过什么?构建这样一个功能的特定部分是否您不了解?
-
我尝试了一种使用先前、当前和临时指针的方法,我在链表上使用过,但它不起作用,反而会崩溃。我的链表只有一个头指针,但这个队列有一个头和一个尾,我不确定如何去做。
-
我相信您应该编辑您的问题以添加这些详细信息(可能还有一些示例),而不是将它们添加为 cmets。