kaisanwan 2016-10-26 09:35 采纳率: 0%
浏览 1014

C语言数据结构中链队,初始化了两个链队 但是貌似两个链队是一样的?代码结果如下

#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是一样的,如何解决这个问题,求解。

  • 写回答

1条回答 默认 最新

  • SeaTalks 2016-10-26 11:34
    关注

    你的代码结构有点混乱,队列带不带头指针的问题,代码中好像一直表达不清,现在是按有头指针改的代码,运行后结果为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;
    
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算