#include
#include
#define TRUE 1
#define FALSE 0
typedef struct Node{
int data;//数据域
struct Node *next;//指针域
}LinkQueueNode;
typedef struct {
LinkQueueNode *front;
LinkQueueNode *rear;
}LinkQueue;
LinkQueue* InitQueue()
{ LinkQueue Q;
Q->front=(LinkQueueNode)malloc(sizeof(LinkQueueNode));
Q->rear=Q->front;
Q->front->next=NULL;
return Q;
}
int EnterQueue(LinkQueue Q,int x)
{
/ 将数据元素x插入到队列Q中 /
LinkQueueNode *NewNode;
NewNode=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if(NewNode!=NULL)
{
NewNode->data=x;
NewNode->next=NULL;
Q->rear->next=NewNode;
Q->rear=NewNode;
return (TRUE);
}
else return (FALSE); / 溢出!*/
}
int DeleteQueue(LinkQueue Q,int *x)
{
/ 将队列Q的队头元素出队,并存放到x所指的存储空间中 /
LinkQueueNode *p;
if(Q->front==Q->rear)
return(FALSE);
p=Q->front->next;
Q->front->next=p->next; / 队头元素p出队 /
if(Q->rear==p) / 如果队中只有一个元素p,则p出队后成为空队 /
Q->rear=Q->front;
*x=p->data;
free(p); / 释放存储空间 */
return(TRUE);
}
int main(){
LinkQueue *A=InitQueue();
LinkQueue *B=InitQueue();
EnterQueue(A,1);
EnterQueue(A,2);
EnterQueue(B,3);
EnterQueue(B,4);
int a,e;
DeleteQueue(B,&a);
printf("%d ",a);
DeleteQueue(A,&e);
printf("%d ",e);
return 0;
}
本应该是 3 1 结果却是1 2 只能推测A和B是一样的,如何解决这个问题,求解。
你的代码结构有点混乱,队列带不带头指针的问题,代码中好像一直表达不清,现在是按有头指针改的代码,运行后结果为3 1,你可以参考下,祝好!
#include<memory>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
typedef struct Node {
int data;//数据域
struct Node *next;//指针域
}LinkQueueNode;
typedef struct {
LinkQueueNode *front;
LinkQueueNode *rear;
}LinkQueue;
LinkQueue* InitQueue()
{
LinkQueue *Q = (LinkQueue*)malloc(sizeof(LinkQueue)); //需要给Q分配空间
Q->front = (LinkQueueNode*)malloc(sizeof(LinkQueueNode));
//Q->front;
Q->rear = Q->front->next = NULL; //注意这一句与你的不同
return Q;
}
int EnterQueue(LinkQueue *Q, int x)
{
// 将数据元素x插入到队列Q中 /
LinkQueueNode *NewNode;
NewNode = (LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if (NewNode != NULL)
{
NewNode->data = x;
NewNode->next = NULL;
if (Q->front->next == NULL) Q->front->next = Q->rear = NewNode; //注意这一句的作用!!!
else Q->rear->next = NewNode;
Q->rear = NewNode;
return (TRUE);
}
else return (FALSE); //溢出!
}
int DeleteQueue(LinkQueue *Q, int *x)
{
// 将队列Q的队头元素出队,并存放到x所指的存储空间中 /
LinkQueueNode *p;
if (Q->front->next == NULL)
return(FALSE);
p = Q->front->next;
Q->front->next = p->next;
if (Q->rear == p)
Q->rear = Q->front;
*x = p->data;
free(p);
return(TRUE);
}
int main() {
LinkQueue *A = InitQueue();
LinkQueue *B = InitQueue();
EnterQueue(A, 1);
EnterQueue(A, 2);
EnterQueue(B, 3);
EnterQueue(B, 4);
int a, e;
DeleteQueue(B, &a);
printf("%d ", a);
DeleteQueue(A, &e);
printf("%d ", e);
return 0;
}