C语言数据结构中链队,我初始化了两个,确实一样的内容?代码和结果如下

发布于 2021-12-03 04:07:49 字数 2052 浏览 750 评论 2

#include <stdio.h>
#include <malloc.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;
  // Q=(LinkQueue*)malloc(sizeof(LinkQueue));
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是一样的搞不懂,求解。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

泛滥成性 2021-12-03 14:24:07

受教了,谢谢!

多彩岁月 2021-12-03 09:07:37

因为你的InitQueue函数里没有给Q这个指针分配内存。你一直在返回一个野指针。

分配内存的那句被你注释掉了// Q=(LinkQueue*)malloc(sizeof(LinkQueue));

由于这个野指针在调用InitQueue的时候没有变动,所以两次调用InitiQueue实际上返回的都是一个地址。

所以A 和B其实是一个列表。而且地址还是没分配的不知道哪里的内存。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文