非常着急的一个问题
- C/C++ code
typedef struct QNode{ QElemType data; QNode *next;}*QueuePtr;typedef struct{ QueuePtr front; QueuePtr rear;}LinkQueue; LinkQueue q[5];void InitQueue(LinkQueue Lq[5]) //置空队列{ for(int i=0;i<5;i++) { Lq[i].rear=Lq[i].front=new QNode; Lq[i].front->next=NULL; Lq[i].front->data.ArrivalTime=0; Lq[i].front->data.Duration=0; }}void EnQueue(LinkQueue Lq, int Occurtime, int durtime) //将发生在Occurtime持续durtime时间的事件加入队列Lq{ QueuePtr p=new QNode,q=Lq.front->next,k=new QNode; p->data.ArrivalTime=Occurtime; p->data.Duration=durtime; p->next=NULL; if(Lq.front->next!=NULL) { while(q!=NULL) { k=q; q=q->next; } k->next=p; Lq.rear=p; } else { Lq.rear->next=p; Lq.rear=p; }}int QueueLength(LinkQueue Lq) //返回队列Lq的长度{ int length=0; QueuePtr p=Lq.front->next; while(p) { length++; p=p->next; } return length;}int Minimum(LinkQueue *q) //返回长度最短的队列{ int Lq_time[5]={0}; //记录所有队列耗时 for(int i=1;i<5;i++) { if(q[i].front->next!=NULL) { QueuePtr tempQ=new QNode; tempQ=q[i].front->next; do { Lq_time[i]=tempQ->data.ArrivalTime+tempQ->data.Duration; tempQ=tempQ->next; } while (tempQ->next!=NULL); } else Lq_time[i]=0; } int min=Lq_time[1]; int min_i=1; for(int i=1;i<4;i++) { if(min>Lq_time[i+1]) { min=Lq_time[i+1]; min_i=i+1; } } return min_i;}int QueueLength(LinkQueue Lq) //返回队列Lq的长度{ int length=0; QueuePtr p=Lq.front->next; while(p) { length++; p=p->next; } return length;}int main(){ int i=Minimum(q); EnQueue(q[i],en.OccurTime,durtime); if (QueueLength(q[i])==1) {……} return 0;}运行上述代码时,在main里面的if那里就内存冲突了,单步调试发现是存入队列的元素在q[i]里面已经不存在了,求解……
[解决办法]
int QueueLength(LinkQueue Lq) ==> int QueueLength(LinkQueue* Lq)